From patchwork Mon Dec 22 16:41:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 423431 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 1CED21400B7 for ; Tue, 23 Dec 2014 03:41:58 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; q=dns; s=default; b=lwxGqztbpV4jg6w9P gGcZrgLWOBoaLz4MNXiQ7aMgUeuapvdJOZtWdMxpTkYSOp++5tajxRtebMIwqN+4 9az5LcLbaMHyVuXR/8bee+T4T1Ykd494pyLcTugZM7jmoxJYFsffuRNLN7F3XyFN rWgX5EqHV68yOUewGKeC4jPLME= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=default; bh=gzQcPR4XHO1SvYRSNaW2RF+ Hbew=; b=BNoP/coiIi5qzUd3fQ2N5ES6xuoBj/NLFsr43VW+rgN09aagXBTsmmM TWoMBxUlONMvSmhS2O5SCALSAoYD4uLEgiro28mFc0kEv66nc1Uux3eOAGRnzmDw 7ckhvVyPQabLUJkN4McRAGKo50zm2UKenvsKSxYeMazb6AyB/OoA= Received: (qmail 2134 invoked by alias); 22 Dec 2014 16:41:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 2109 invoked by uid 89); 22 Dec 2014 16:41:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 22 Dec 2014 16:41:49 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id sBMGfmc3024060 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 22 Dec 2014 11:41:48 -0500 Received: from localhost (ovpn-116-60.ams2.redhat.com [10.36.116.60]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id sBMGfkO6012386; Mon, 22 Dec 2014 11:41:47 -0500 Date: Mon, 22 Dec 2014 16:41:46 +0000 From: Jonathan Wakely To: Kai Tietz Cc: libstdc++ , gcc-patches@gcc.gnu.org Subject: Re: std::stoi and std::to_string on MinGW Message-ID: <20141222164146.GQ3134@redhat.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) On 22/12/14 16:02 +0100, Kai Tietz wrote: >2014-12-20 3:28 GMT+01:00 Jonathan Wakely : >> 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. commit 2f555dc433089e1ae36f0ca6bd79424814bbc218 Author: Jonathan Wakely 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 @@ -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(&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 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 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 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 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 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 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 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 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 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