diff mbox

std::stoi and std::to_string on MinGW

Message ID 20141222164146.GQ3134@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Dec. 22, 2014, 4:41 p.m. UTC
On 22/12/14 16:02 +0100, Kai Tietz wrote:
>2014-12-20 3:28 GMT+01:00 Jonathan Wakely <jwakely.gcc@gmail.com>:
>> People keep hitting the problem that std::stoi and std::to_string are
>> not defined when using MinGW, because of the fix for
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37522
>>
>> If the problem is only with vswprintf then couldn't we enable
>> everything except std::to_wstring?
>>
>> That would solve the problem for most people, as std::to_string and
>> all the std::sto* functions would be defined, we'd only be missing
>> std::to_wstring which I never see anyone trying to use anyway.
>
>So patch is ok.  AFAICS it affects just MinGW.org based build of libstdc++, as
>
>_GLIBCXX_HAVE_BROKEN_VSWPRINTF is just defined in this case.  For
>mingw targets using mingw-w64 based build this change has no affect
>due it provides none-broken w-scanf/printf C99 API,

Yes, this only affects mingw.org not mingw-w64

>Patch is ok.
>
>Thanks,
>Kai
>
>PS: By mingw-w64 users the wide-character API is actually used.

Thanks, Kai. Here's the full patch, which enables std::stoi etc.
(everything except std::to_wstring) for MinGW.org

Tested powerpc64-linux, committed to trunk.

Comments

Tejas Belagod Dec. 29, 2014, 6:46 p.m. UTC | #1
On 22/12/14 16:41, Jonathan Wakely wrote:
> On 22/12/14 16:02 +0100, Kai Tietz wrote:
>> 2014-12-20 3:28 GMT+01:00 Jonathan Wakely <jwakely.gcc@gmail.com>:
>>> People keep hitting the problem that std::stoi and std::to_string are
>>> not defined when using MinGW, because of the fix for
>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37522
>>>
>>> If the problem is only with vswprintf then couldn't we enable
>>> everything except std::to_wstring?
>>>
>>> That would solve the problem for most people, as std::to_string and
>>> all the std::sto* functions would be defined, we'd only be missing
>>> std::to_wstring which I never see anyone trying to use anyway.
>>
>> So patch is ok.  AFAICS it affects just MinGW.org based build of libstdc++, as
>>
>> _GLIBCXX_HAVE_BROKEN_VSWPRINTF is just defined in this case.  For
>> mingw targets using mingw-w64 based build this change has no affect
>> due it provides none-broken w-scanf/printf C99 API,
>
> Yes, this only affects mingw.org not mingw-w64
>
>> Patch is ok.
>>
>> Thanks,
>> Kai
>>
>> PS: By mingw-w64 users the wide-character API is actually used.
>
> Thanks, Kai. Here's the full patch, which enables std::stoi etc.
> (everything except std::to_wstring) for MinGW.org
>
> Tested powerpc64-linux, committed to trunk.
>

Hi Jonathan,

This patch seems to break a few UNSUPPORTED tests on AArch64.

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64438

Thanks,
Tejas.
diff mbox

Patch

commit 2f555dc433089e1ae36f0ca6bd79424814bbc218
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Mon Dec 22 16:28:28 2014 +0000

    	PR libstdc++/37522
    	* include/bits/basic_string.h (stod, stof, stoi, stol, stold, stoll,
    	stoul, stoull, to_string): Only use _GLIBCXX_HAVE_BROKEN_VSWPRINTF
    	to guard definition of to_wstring.
    	* testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc:
    	Do not use dg-require-string-conversions.
    	* testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc:
    	Likewise.
    	* testsuite/21_strings/basic_string/numeric_conversions/char/stof.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/stold.cc:
    	Likewise.
    	* testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc:
    	Likewise.
    	* testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc:
    	Likewise.
    	* testsuite/21_strings/basic_string/numeric_conversions/char/
    	stoull.cc: Likewise.
    	* testsuite/21_strings/basic_string/numeric_conversions/char/
    	to_string.cc: Likewise.

diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index 7729384..6423c59 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -5240,8 +5240,7 @@  _GLIBCXX_END_NAMESPACE_CXX11
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace
 
-#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
-     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
+#if __cplusplus >= 201103L && defined(_GLIBCXX_USE_C99)
 
 #include <ext/string_conversions.h>
 
@@ -5392,6 +5391,7 @@  _GLIBCXX_BEGIN_NAMESPACE_CXX11
   stold(const wstring& __str, size_t* __idx = 0)
   { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
 
+#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
   // DR 1261.
   inline wstring
   to_wstring(int __val)
@@ -5453,6 +5453,7 @@  _GLIBCXX_BEGIN_NAMESPACE_CXX11
     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
 					    L"%Lf", __val);
   }
+#endif // _GLIBCXX_HAVE_BROKEN_VSWPRINTF
 #endif
 
 _GLIBCXX_END_NAMESPACE_CXX11
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
index b9de1cd..e7fea9e 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/dr1261.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2009-11-11  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc
index 5e3060c..fa9dedb 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stod.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc
index 607f97b..16b9fc2 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stof.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc
index 6c0fb98..1032e6e 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoi.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc
index 9cdb4b0..df6ad78 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stol.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc
index 039534c..e201780 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stold.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc
index dce8fdf..b5ced9f 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoll.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc
index 9cc2609..29c462b 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoul.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc
index 8a04e07..3900431 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/stoull.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>
 
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string.cc
index 516e602..4f7f75a 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/char/to_string.cc
@@ -1,5 +1,4 @@ 
 // { dg-options "-std=gnu++11" }
-// { dg-require-string-conversions "" }
 
 // 2008-06-15  Paolo Carlini  <paolo.carlini@oracle.com>