]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
formatter.h (_Debug_msg_id): Add __msg_valid_load_factor.
authorFrançois Dumont <fdumont@gcc.gnu.org>
Thu, 18 Oct 2012 19:50:37 +0000 (19:50 +0000)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Thu, 18 Oct 2012 19:50:37 +0000 (19:50 +0000)
2012-10-18  François Dumont  <fdumont@gcc.gnu.org>

* include/debug/formatter.h (_Debug_msg_id): Add
__msg_valid_load_factor.
* include/debug/macros.h (__glibcxx_check_max_load_factor): New.
* include/debug/unordered_set
(unordered_set<>::max_load_factor(float)): Check max load factor
is positive.
(unordered_multiset<>::max_load_factor(float)): Likewise.
* include/debug/unordered_map
(unordered_map<>::max_load_factor(float)): Likewise.
(unordered_multimap<>::max_load_factor(float)): Likewise.
* testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc:
New.
* testsuite/23_containers/unordered_multimap/debug/
max_load_factor_neg.cc: New.
* testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc:
New.
* testsuite/23_containers/unordered_multiset/debug/
max_load_factor_neg.cc: New.

From-SVN: r192575

libstdc++-v3/ChangeLog
libstdc++-v3/include/debug/formatter.h
libstdc++-v3/include/debug/macros.h
libstdc++-v3/include/debug/unordered_map
libstdc++-v3/include/debug/unordered_set
libstdc++-v3/src/c++11/debug.cc
libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/max_load_factor_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc [new file with mode: 0644]

index 709f47986c02c683ab0143e774e2f914a4170dd6..fabcbc73925f259bccf8296362815b236d7df0ce 100644 (file)
@@ -1,3 +1,24 @@
+2012-10-18  François Dumont  <fdumont@gcc.gnu.org>
+
+       * include/debug/formatter.h (_Debug_msg_id): Add
+       __msg_valid_load_factor.
+       * include/debug/macros.h (__glibcxx_check_max_load_factor): New.
+       * include/debug/unordered_set
+       (unordered_set<>::max_load_factor(float)): Check max load factor
+       is positive.
+       (unordered_multiset<>::max_load_factor(float)): Likewise.
+       * include/debug/unordered_map
+       (unordered_map<>::max_load_factor(float)): Likewise.
+       (unordered_multimap<>::max_load_factor(float)): Likewise.
+       * testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc:
+       New.
+       * testsuite/23_containers/unordered_multimap/debug/
+       max_load_factor_neg.cc: New.
+       * testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc:
+       New.
+       * testsuite/23_containers/unordered_multiset/debug/
+       max_load_factor_neg.cc: New.
+
 2012-10-17  Benjamin Kosnik  <bkoz@redhat.com>
 
        * include/bits/move.h (move_if_noexcept): Mark constexpr.
index 9bed99821e9f704abac85429228d50251f694c1e..1d29d8ce55a4fedc2a409f7d79f641751b9c0ee1 100644 (file)
@@ -113,7 +113,8 @@ namespace __gnu_debug
     // self move assign
     __msg_self_move_assign,
     // unordered container buckets
-    __msg_bucket_index_oob
+    __msg_bucket_index_oob,
+    __msg_valid_load_factor
   };
 
   class _Error_formatter
index a8e2f5facb71054e00cbbd9a5db9264d52849bbf..3df0c9bd31d7ce67edb73f5e178ea3ab2eba13ee 100644 (file)
@@ -324,7 +324,13 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
 // Verify that the container is not self move assigned
 #define __glibcxx_check_self_move_assign(_Other)                       \
 _GLIBCXX_DEBUG_VERIFY(this != &_Other,                                 \
-                     _M_message(__gnu_debug::__msg_self_move_assign)   \
+                     _M_message(__gnu_debug::__msg_self_move_assign)   \
+                      ._M_sequence(*this, "this"))
+
+// Verify that load factor is position
+#define __glibcxx_check_max_load_factor(_F)                            \
+_GLIBCXX_DEBUG_VERIFY(_F > 0.0f,                                       \
+                     _M_message(__gnu_debug::__msg_valid_load_factor)  \
                       ._M_sequence(*this, "this"))
 
 #ifdef _GLIBCXX_DEBUG_PEDANTIC
index e980d8ce4f16cf09fddd08e79b7247f3f60ff2cb..b03772d4cae0b4352258f3a6809ee3399872cf0e 100644 (file)
@@ -230,6 +230,17 @@ namespace __debug
        return _Base::bucket_size(__b);
       }
 
+      float
+      max_load_factor() const noexcept
+      { return _Base::max_load_factor(); }
+
+      void
+      max_load_factor(float __f)
+      {
+       __glibcxx_check_max_load_factor(__f);
+       _Base::max_load_factor(__f);
+      }
+
       template<typename... _Args>
        std::pair<iterator, bool>
        emplace(_Args&&... __args)
@@ -670,6 +681,17 @@ namespace __debug
        return _Base::bucket_size(__b);
       }
 
+      float
+      max_load_factor() const noexcept
+      { return _Base::max_load_factor(); }
+
+      void
+      max_load_factor(float __f)
+      {
+       __glibcxx_check_max_load_factor(__f);
+       _Base::max_load_factor(__f);
+      }
+
       template<typename... _Args>
        iterator
        emplace(_Args&&... __args)
index 276821d7e83cb87efa77a565b4dd5d47e21afa59..07d2893b83949457e9d60bb0a9ac0efb4ec33bcf 100644 (file)
@@ -230,6 +230,17 @@ namespace __debug
        return _Base::bucket_size(__b);
       }
 
+      float
+      max_load_factor() const noexcept
+      { return _Base::max_load_factor(); }
+
+      void
+      max_load_factor(float __f)
+      {
+       __glibcxx_check_max_load_factor(__f);
+       _Base::max_load_factor(__f);
+      }
+
       template<typename... _Args>
        std::pair<iterator, bool>
        emplace(_Args&&... __args)
@@ -665,6 +676,17 @@ namespace __debug
        return _Base::bucket_size(__b);
       }
 
+      float
+      max_load_factor() const noexcept
+      { return _Base::max_load_factor(); }
+
+      void
+      max_load_factor(float __f)
+      {
+       __glibcxx_check_max_load_factor(__f);
+       _Base::max_load_factor(__f);
+      }
+
       template<typename... _Args>
        iterator
        emplace(_Args&&... __args)
index 6cd93d108e1fefd93aed13608aac1bf78c253417..8a18026a44e8f5e5d632ea38c53423517f3d7d83 100644 (file)
@@ -180,7 +180,8 @@ namespace __gnu_debug
     "function requires a non-empty iterator range [%1.name;, %2.name;)",
     "attempt to self move assign",
     "attempt to access container with out-of-bounds bucket index %2;,"
-    " container only holds %3; buckets"
+    " container only holds %3; buckets",
+    "load factor shall be positive"
   };
 
   void
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/max_load_factor_neg.cc
new file mode 100644 (file)
index 0000000..5766489
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=c++11" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+
+void test01()
+{
+  std::unordered_multimap<int, int> um;
+  um.max_load_factor(-1.0f);
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/max_load_factor_neg.cc
new file mode 100644 (file)
index 0000000..b4b15de
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=c++11" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_map>
+
+void test01()
+{
+  std::unordered_map<int, int> um;
+  um.max_load_factor(-1.0f);
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/max_load_factor_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/max_load_factor_neg.cc
new file mode 100644 (file)
index 0000000..797eeaa
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=c++11" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+
+void test01()
+{
+  std::unordered_multiset<int> us;
+  us.max_load_factor(-1.0f);
+}
+
+int main()
+{
+  test01();
+  return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/max_load_factor_neg.cc
new file mode 100644 (file)
index 0000000..b18e6e5
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (C) 2012 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+//
+// { dg-require-debug-mode "" }
+// { dg-options "-std=c++11" }
+// { dg-do run { xfail *-*-* } }
+
+#include <unordered_set>
+
+void test01()
+{
+  std::unordered_set<int> us;
+  us.max_load_factor(-1.0f);
+}
+
+int main()
+{
+  test01();
+  return 0;
+}