Follow-up patch to make the exception specs on the default constructors 
conditional, depending on the allocator.

Tested x86_64-linux, committed to trunk.



commit 67b0d66cc6a1af5f697543d24ad7578d81c5eb98
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Wed Jan 22 23:07:23 2014 +0000

        PR libstdc++/58764 (again)
        * include/bits/stl_list.h (list): Make default constructor's exception
        specification conditional.
        * include/bits/stl_vector.h (vector): Likewise.
        * testsuite/util/testsuite_allocator.h (SimpleAllocator): Add noexcept
        to default constructor.
        * testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
        Adjust dg-error line number.
        * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc:
        Likewise.
        * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc:
        Likewise.
        * testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
        Likewise.
        * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
        Likewise.
        * testsuite/23_containers/vector/requirements/dr438/
        constructor_1_neg.cc: Likewise.
        * testsuite/23_containers/vector/requirements/dr438/
        constructor_2_neg.cc: Likewise.
        * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
        Likewise.

diff --git a/libstdc++-v3/include/bits/stl_list.h 
b/libstdc++-v3/include/bits/stl_list.h
index 19bb189..e014fbc 100644
--- a/libstdc++-v3/include/bits/stl_list.h
+++ b/libstdc++-v3/include/bits/stl_list.h
@@ -530,7 +530,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       /**
        *  @brief  Creates a %list with no elements.
        */
-      list() _GLIBCXX_NOEXCEPT
+      list()
+#if __cplusplus >= 201103L
+      noexcept(is_nothrow_default_constructible<_Node_alloc_type>::value)
+#endif
       : _Base() { }
 
       /**
diff --git a/libstdc++-v3/include/bits/stl_vector.h 
b/libstdc++-v3/include/bits/stl_vector.h
index 14284aa..f482957 100644
--- a/libstdc++-v3/include/bits/stl_vector.h
+++ b/libstdc++-v3/include/bits/stl_vector.h
@@ -246,7 +246,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       /**
        *  @brief  Creates a %vector with no elements.
        */
-      vector() _GLIBCXX_NOEXCEPT : _Base() { }
+      vector()
+#if __cplusplus >= 201103L
+      noexcept(is_nothrow_default_constructible<_Alloc>::value)
+#endif
+      : _Base() { }
 
       /**
        *  @brief  Creates a %vector with no elements.
diff --git 
a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc 
b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
index fed7829..7c29a2d 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1653 }
+// { dg-error "no matching" "" { target *-*-* } 1656 }
 
 #include <list>
 
diff --git 
a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
 
b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
index f5eae4f..382d985 100644
--- 
a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
+++ 
b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1605 }
+// { dg-error "no matching" "" { target *-*-* } 1608 }
 
 #include <list>
 
diff --git 
a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
 
b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
index e0fbe97..14585af 100644
--- 
a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
+++ 
b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1605 }
+// { dg-error "no matching" "" { target *-*-* } 1608 }
 
 #include <list>
 #include <utility>
diff --git 
a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc 
b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
index 3904624..a9f9f30 100644
--- a/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1605 }
+// { dg-error "no matching" "" { target *-*-* } 1608 }
 
 #include <list>
 
diff --git 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
index cfbe734..a12b116 100644
--- 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
+++ 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1312 }
+// { dg-error "no matching" "" { target *-*-* } 1316 }
 
 #include <vector>
 
diff --git 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
index 88b6e0e..b839ccc 100644
--- 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
+++ 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1238 }
+// { dg-error "no matching" "" { target *-*-* } 1242 }
 
 #include <vector>
 
diff --git 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
index 94cc4ba..e9e966b 100644
--- 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
+++ 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1238 }
+// { dg-error "no matching" "" { target *-*-* } 1242 }
 
 #include <vector>
 #include <utility>
diff --git 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
index de61175..71c6c49 100644
--- 
a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
+++ 
b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
@@ -18,7 +18,7 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1353 }
+// { dg-error "no matching" "" { target *-*-* } 1357 }
 
 #include <vector>
 
diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h 
b/libstdc++-v3/testsuite/util/testsuite_allocator.h
index 2cead66..748557c 100644
--- a/libstdc++-v3/testsuite/util/testsuite_allocator.h
+++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h
@@ -454,7 +454,7 @@ namespace __gnu_test
     {
       typedef Tp value_type;
 
-      SimpleAllocator() { }
+      SimpleAllocator() noexcept { }
 
       template <class T>
         SimpleAllocator(const SimpleAllocator<T>& other) { }

Reply via email to