]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/37522 (Incorrect vswprintf prototype breaks __to_xstring)
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 27 Oct 2008 15:01:28 +0000 (15:01 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 27 Oct 2008 15:01:28 +0000 (15:01 +0000)
2008-10-27  Paolo Carlini  <paolo.carlini@oracle.com>

PR libstdc++/37522
* config/os/mingw32/os_defines.h: Define _GLIBCXX_HAVE_BROKEN_VSWPRINTF
* include/bits/basic_string.h: Guard string conversions with
!defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF) too.
* testsuite/lib/libstdc++.exp (check_v3_target_string_conversions):
New.
* testsuite/lib/dg-options.exp (dg-require-string-conversions): New.
* testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc:
Use the latter.
* testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc:
Likewise.
* testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc:
Likewise.
* testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc:
Likewise.
* testsuite/21_strings/basic_string/numeric_conversions/char/
stoull.cc: Likewise.
* testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc:
Likewise.
* testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc:
Likewise.
* testsuite/21_strings/basic_string/numeric_conversions/char/
to_string.cc: Likewise.
* testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc:
Likewise.

From-SVN: r141382

14 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/config/os/mingw32/os_defines.h
libstdc++-v3/include/bits/basic_string.h
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc
libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string.cc
libstdc++-v3/testsuite/lib/dg-options.exp
libstdc++-v3/testsuite/lib/libstdc++.exp

index 97ce9efec4fcd44f36ac253ff8bf180ddaf96338..af59f6383076787f183e98a28fa897074d705b16 100644 (file)
@@ -1,3 +1,31 @@
+2008-10-27  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/37522
+       * config/os/mingw32/os_defines.h: Define _GLIBCXX_HAVE_BROKEN_VSWPRINTF
+       * include/bits/basic_string.h: Guard string conversions with 
+       !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF) too.
+       * testsuite/lib/libstdc++.exp (check_v3_target_string_conversions):
+       New.
+       * testsuite/lib/dg-options.exp (dg-require-string-conversions): New.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc:
+       Use the latter.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/
+       stoull.cc: Likewise.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc:
+       Likewise.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/
+       to_string.cc: Likewise.
+       * testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc:
+       Likewise.
+
 2008-10-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * config/os/generic/error_constants.h (enum errc): Remove
index 3ac8fff5252e63557f0300bf1a8ad9ec2180ef9d..017fd8759bd33f607131bdc6291f3e678fde4d12 100644 (file)
@@ -1,6 +1,7 @@
 // Specific definitions for generic platforms  -*- C++ -*-
 
-// Copyright (C) 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+// 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
@@ -52,4 +53,7 @@
 // See libstdc++/20806.
 #define _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM 1
 
+// See  libstdc++/37522.
+#define _GLIBCXX_HAVE_BROKEN_VSWPRINTF 1
+
 #endif
index de4cf80234dfbdd0945deedb448303228dfebae7..595a1560fa6f8064b8d317e7362b42f2282fd2bf 100644 (file)
@@ -2562,7 +2562,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
 _GLIBCXX_END_NAMESPACE
 
-#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99))
+#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99) \
+     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
 
 #include <ext/string_conversions.h>
 
index 765c5a210ec5035738ce315d568faa93b4b0412a..1f6ec0fc2de403a5be68fa073fba969bdf2783e1 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -129,8 +129,6 @@ test01()
       VERIFY( test );
       VERIFY( d1 == -1.0 );
     }
-
-#endif
 }
 
 int main()
index 5645c0af9b8fd4eb647cbd3061915db1e88277f7..32510e0f47fdc080656bf4bae012522265da3458 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -129,8 +129,6 @@ test01()
       VERIFY( test );
       VERIFY( f1 == -1.0f );
     }
-
-#endif
 }
 
 int main()
index 6f1efd0f4b93ceb916b805752ba85129f46405cb..0dc2df22df91260f830a8fd408c4e190e087c60d 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -194,8 +194,6 @@ test01()
     }
   VERIFY( test );
   VERIFY( i1 == 1 );
-
-#endif
 }
 
 int main()
index 683063fadf0ecd7da2727407eb946ef8e46e4c00..25970f2eb5fa49c6f3d494d46e960656b2cc0c13 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -157,8 +157,6 @@ test01()
     }
   VERIFY( test );
   VERIFY( l1 == numeric_limits<long>::min() );
-
-#endif
 }
 
 int main()
index 3a5d73a954b73da4353b55d183f3b7986b6324e4..54f4ffe1eae59ba12a857e011544f8c295f8b902 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -106,8 +106,6 @@ test01()
       test = false;
     }
   VERIFY( test );
-
-#endif
 }
 
 int main()
index 6d922156281483edcf7a186c227843531d920a70..b20c5c5efebd70753651c33a50ed0e589a5bb783 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -157,8 +157,6 @@ test01()
     }
   VERIFY( test );
   VERIFY( ll1 == numeric_limits<long long>::min() );
-
-#endif
 }
 
 int main()
index c2d6cead33774b6a0cc7f1949ddfd58500a457cd..20c6e08d2fcc61bbd397b81b9a591e89ecc03028 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -144,8 +144,6 @@ test01()
     }
   VERIFY( test );
   VERIFY( ul1 == numeric_limits<unsigned long>::max() );
-
-#endif
 }
 
 int main()
index 30c94ff8255ef2a262b59f214abacc217f78a6a8..94ef49602fbe0a7af5a55d6b7461a5fad2e6e2bd 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -29,8 +31,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = false;
   using namespace std;
 
@@ -144,8 +144,6 @@ test01()
     }
   VERIFY( test );
   VERIFY( ull1 == numeric_limits<unsigned long long>::max() );
-
-#endif
 }
 
 int main()
index 7a7d065734081752abb4bdc9935cf7d00a272da6..a332c41a1db70459b7095cd880a25f4f01a216b9 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
+
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
 // Copyright (C) 2008 Free Software Foundation, Inc.
@@ -27,8 +29,6 @@
 void
 test01()
 {
-#ifdef _GLIBCXX_USE_C99
-
   bool test __attribute__((unused)) = true;
   using namespace std;
   
@@ -55,8 +55,6 @@ test01()
   long double ld2 = -4.0L;
   string six(to_string(ld2));
   VERIFY( six == "-4.000000" );
-
-#endif
 }
 
 int main()
index 0f1bfcfe559fdc37c1358d69cfad8708956e0c4c..78072256476fbbeff40d48434e181203d80d44a2 100644 (file)
@@ -124,3 +124,12 @@ proc dg-require-nanosleep { args } {
     }
     return
 }
+
+proc dg-require-string-conversions { args } {
+    if { ![ check_v3_target_string_conversions ] } {
+        upvar dg-do-what dg-do-what
+        set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+        return
+    }
+    return
+}
index 10eac6294b51e25b85726e29328f121d8c423117..8a4e8c430c4a88baa4cede1aae2a6d4b04a565ce 100644 (file)
@@ -1236,3 +1236,61 @@ proc check_v3_target_nanosleep { } {
     verbose "check_v3_target_nanosleep: $et_nanosleep" 2
     return $et_nanosleep
 }
+
+proc check_v3_target_string_conversions { } {
+    global cxxflags
+    global DEFAULT_CXXFLAGS
+    global et_string_conversions
+
+    global tool
+
+    if { ![info exists et_string_conversions_target_name] } {
+        set et_string_conversions_target_name ""
+    }
+
+    # If the target has changed since we set the cached value, clear it.
+    set current_target [current_target_name]
+    if { $current_target != $et_string_conversions_target_name } {
+        verbose "check_v3_target_string_conversions: `$et_string_conversions_target_name'" 2
+        set et_string_conversions_target_name $current_target
+        if [info exists et_string_conversions] {
+            verbose "check_v3_target_string_conversions: removing cached result" 2
+            unset et_string_conversions
+        }
+    }
+
+    if [info exists et_string_conversions] {
+        verbose "check_v3_target_string_conversions: using cached result" 2
+    } else {
+        set et_string_conversions 0
+       
+       # Set up and compile a C++0x test program that depends
+        # on the string_conversions facilities to be available.
+        set src string_conversions[pid].cc
+        set exe string_conversions[pid].exe
+
+        set f [open $src "w"]
+        puts $f "#include <bits/c++config.h>"
+        puts $f "int main()"
+        puts $f "#if defined(_GLIBCXX_USE_C99) && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)"
+        puts $f "{ return 0; }"
+        puts $f "#endif"
+        close $f
+
+        set cxxflags_saved $cxxflags
+        set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror"
+
+        set lines [v3_target_compile $src $exe executable ""]
+        set cxxflags $cxxflags_saved
+        file delete $src
+
+        if [string match "" $lines] {
+            # No error message, compilation succeeded.
+            set et_string_conversions 1
+        } else {
+            verbose "check_v3_target_string_conversions: compilation failed" 2
+        }
+    }
+    verbose "check_v3_target_string_conversions: $et_string_conversions" 2
+    return $et_string_conversions
+}