Define cxx11-abi effective target for libstdc++ tests
authorJonathan Wakely <jwakely@redhat.com>
Fri, 13 Jan 2017 14:57:33 +0000 (14:57 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 13 Jan 2017 14:57:33 +0000 (14:57 +0000)
PR libstdc++/79075
* testsuite/lib/libstdc++.exp (check_v3_target_filesystem_ts): Remove
redundant option from cxxflags.
(check_effective_target_cxx11-abi): Define.
* testsuite/21_strings/basic_string/allocator/71964.cc: Use cxx11-abi
effective target.
* testsuite/21_strings/basic_string/allocator/char/copy.cc: Likewise.
* testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/minimal.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/move.cc: Likewise.
* testsuite/21_strings/basic_string/allocator/char/move_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/noexcept.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/swap.cc: Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/move.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc:
Likewise.
* testsuite/23_containers/list/61347.cc: Likewise.
* testsuite/27_io/basic_fstream/cons/base.cc: Likewise.
* testsuite/27_io/ios_base/failure/cxx11.cc: Likewise.

From-SVN: r244440

20 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/21_strings/basic_string/allocator/71964.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/copy_assign.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/minimal.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/move_assign.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/noexcept.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/char/swap.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc
libstdc++-v3/testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc
libstdc++-v3/testsuite/23_containers/list/61347.cc
libstdc++-v3/testsuite/27_io/basic_fstream/cons/base.cc
libstdc++-v3/testsuite/27_io/ios_base/failure/cxx11.cc
libstdc++-v3/testsuite/lib/libstdc++.exp

index 76d86fb..a52fc96 100644 (file)
@@ -1,3 +1,40 @@
+2017-01-13  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/79075
+       * testsuite/lib/libstdc++.exp (check_v3_target_filesystem_ts): Remove
+       redundant option from cxxflags.
+       (check_effective_target_cxx11-abi): Define.
+       * testsuite/21_strings/basic_string/allocator/71964.cc: Use cxx11-abi
+       effective target.
+       * testsuite/21_strings/basic_string/allocator/char/copy.cc: Likewise.
+       * testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/char/minimal.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/char/move.cc: Likewise.
+       * testsuite/21_strings/basic_string/allocator/char/move_assign.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/char/noexcept.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/char/swap.cc: Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/move.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc:
+       Likewise.
+       * testsuite/23_containers/list/61347.cc: Likewise.
+       * testsuite/27_io/basic_fstream/cons/base.cc: Likewise.
+       * testsuite/27_io/ios_base/failure/cxx11.cc: Likewise.
+
 2017-01-13  Ville Voutilainen  <ville.voutilainen@gmail.com>
 
        PR libstdc++/78389
index f5ef176..70e5cf8 100644 (file)
@@ -16,6 +16,8 @@
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
@@ -58,13 +60,10 @@ operator!=(const mv_allocator<T>&, const mv_allocator<U>&) { return false; }
 void
 test01()
 {
-  // COW strings don't support C++11 allocators
-#if _GLIBCXX_USE_CXX11_ABI
   std::basic_string<char, std::char_traits<char>, mv_allocator<char>> s;
   auto t = std::move(s);
   VERIFY( s.get_allocator().moved_from );
   VERIFY( t.get_allocator().moved_to );
-#endif
 }
 
 int
index 0e5f167..bdcadaf 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = char;
 const C c = 'a';
 using traits = std::char_traits<C>;
@@ -86,9 +87,3 @@ int main()
   test03();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index 5b9a0b0..32ee708 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = char;
 const C c = 'a';
 using traits = std::char_traits<C>;
@@ -104,9 +105,3 @@ int main()
   test02();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index 6f0aeb5..46b4215 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <memory>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = char;
 const C c = 'a';
 using traits = std::char_traits<C>;
@@ -40,9 +41,6 @@ void test01()
   v.assign(1, c);
   v.assign(100, c);
 }
-#else
-void test01() { }
-#endif
 
 int main()
 {
index 4e45a05..820b3ed 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
-#if _GLIBCXX_USE_CXX11_ABI
 using C = char;
 const C c = 'a';
 using traits = std::char_traits<C>;
@@ -56,9 +57,3 @@ int main()
   test02();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index 0151a29..df85a0b 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = char;
 const C c = 'a';
 using traits = std::char_traits<C>;
@@ -149,9 +150,3 @@ int main()
   test03();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index b7917e0..90aca89 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = char;
 const C c = 'a';
 using traits = std::char_traits<C>;
@@ -57,4 +58,3 @@ void test03()
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
   static_assert( noexcept( v1.swap(v2) ), "Swap cannot throw" );
 }
-#endif
index 602d856..a7d9bdf 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = char;
 const C c = 'a';
 using traits = std::char_traits<C>;
@@ -79,9 +80,3 @@ int main()
   test02();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index 747a2d0..add276c 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
@@ -86,9 +87,3 @@ int main()
   test03();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index 7757556..89593ba 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
@@ -104,9 +105,3 @@ int main()
   test02();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index dab694e..f8e9885 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <memory>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
@@ -40,9 +41,6 @@ void test01()
   v.assign(1, c);
   v.assign(100, c);
 }
-#else
-void test01() { }
-#endif
 
 int main()
 {
index 7aba440..8db947f 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
-#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
@@ -56,9 +57,3 @@ int main()
   test02();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index 55b8c2a..9d282fc 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
@@ -149,9 +150,3 @@ int main()
   test03();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index 2754828..c107737 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do compile { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
@@ -57,4 +58,3 @@ void test03()
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
   static_assert( noexcept( v1.swap(v2) ), "Swap cannot throw" );
 }
-#endif
index bb1dd82..842fb55 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// COW strings don't support C++11 allocators:
+// { dg-require-effective-target cxx11-abi }
 
 #include <string>
 #include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
-#if _GLIBCXX_USE_CXX11_ABI
 using C = wchar_t;
 const C c = L'a';
 using traits = std::char_traits<C>;
@@ -79,9 +80,3 @@ int main()
   test02();
   return 0;
 }
-#else
-int main()
-{
-  // COW strings don't support C++11 allocators
-}
-#endif
index bf5a20d..526ab32 100644 (file)
@@ -1,6 +1,7 @@
-// { dg-options "-O2 -D_GLIBCXX_USE_CXX11_ABI" }
+// { dg-options "-O2" }
 // { dg-do run { target c++11 } }
 // { dg-require-normal-mode "" }
+// { dg-require-effective-target cxx11-abi }
 
 // Copyright (C) 2015-2017 Free Software Foundation, Inc.
 //
index 21fa2e6..3b9436d 100644 (file)
@@ -15,8 +15,9 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-// { dg-options "-O0 -D_GLIBCXX_USE_CXX11_ABI=1" }
+// { dg-options "-O0" }
 // { dg-do link { target c++11 } }
+// { dg-require-effective-target cxx11-abi }
 
 #include <fstream>
 #include <string>
index 99ad929..46b68b1 100644 (file)
 // <http://www.gnu.org/licenses/>.
 
 // { dg-do run { target c++11 } }
+// { dg-require-effective-target cxx11-abi }
 
 #include <ios>
 #include <testsuite_hooks.h>
 
-#if _GLIBCXX_USE_CXX11_ABI
 using test_type = std::ios_base::failure;
 
 static_assert( std::is_base_of<std::system_error, test_type>::value, "base" );
@@ -51,6 +51,3 @@ main()
   test01();
   test02();
 }
-#else
-int main() { }
-#endif
index 9f0e26b..b081d8a 100644 (file)
@@ -1968,7 +1968,7 @@ proc check_v3_target_filesystem_ts { } {
        close $f
 
        set cxxflags_saved $cxxflags
-       set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror -std=gnu++11"
+       set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
 
        set lines [v3_target_compile $src /dev/null preprocess ""]
        set cxxflags $cxxflags_saved
@@ -1983,6 +1983,34 @@ proc check_v3_target_filesystem_ts { } {
     return $et_filesystem_ts
 }
 
+# Return 1 if the "cxx11" ABI is in use using the current flags, 0 otherwise.
+proc check_effective_target_cxx11-abi { } {
+    global cxxflags
+
+    # Set up and preprocess a C++ test program that depends
+    # on the new ABI being enabled.
+    set src cxx11_abi[pid].cc
+
+    set f [open $src "w"]
+    puts $f "#include <bits/c++config.h>"
+    puts $f "#if ! _GLIBCXX_USE_CXX11_ABI"
+    puts $f "#  error old ABI in use"
+    puts $f "#endif"
+    close $f
+
+    set lines [v3_target_compile $src /dev/null preprocess ""]
+    file delete $src
+
+    if [string match "" $lines] {
+        # No error message, preprocessing succeeded.
+        verbose "check_v3_cxx11_abi: `1'" 2
+        return 1
+    }
+
+    verbose "check_v3_cxx11_abi: `0'" 2
+    return 0
+}
+
 set additional_prunes ""
 
 if { [info exists env(GCC_RUNTEST_PARALLELIZE_DIR)] \