diff options
author | Joseph Myers <joseph@codesourcery.com> | 2009-07-24 21:55:59 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2009-07-24 21:55:59 +0100 |
commit | 2e0814c8d67b6a80fc68cfefd90865bc4e2b87ec (patch) | |
tree | 5030e0493f9aa91365ecaa2155549e136cc3008d | |
parent | 87da38430a7bc90b7363a846f547aae17d43b479 (diff) | |
download | gcc-2e0814c8d67b6a80fc68cfefd90865bc4e2b87ec.zip gcc-2e0814c8d67b6a80fc68cfefd90865bc4e2b87ec.tar.gz gcc-2e0814c8d67b6a80fc68cfefd90865bc4e2b87ec.tar.bz2 |
cwchar (swprintf, vswprintf): Do not use if _GLIBCXX_HAVE_BROKEN_VSWPRINTF.
* include/c_global/cwchar (swprintf, vswprintf): Do not use if
_GLIBCXX_HAVE_BROKEN_VSWPRINTF.
* testsuite/lib/libstdc++.exp (check_v3_target_swprintf): New.
* testsuite/lib/dg-options.exp (dg-require-swprintf): New.
* testsuite/21_strings/headers/cwchar/functions_std.cc,
testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc,
testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc:
Use dg-require-swprintf.
From-SVN: r150063
7 files changed, 86 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 060a82e..a89a4a6 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2009-07-24 Joseph Myers <joseph@codesourcery.com> + + * include/c_global/cwchar (swprintf, vswprintf): Do not use if + _GLIBCXX_HAVE_BROKEN_VSWPRINTF. + * testsuite/lib/libstdc++.exp (check_v3_target_swprintf): New. + * testsuite/lib/dg-options.exp (dg-require-swprintf): New. + * testsuite/21_strings/headers/cwchar/functions_std.cc, + testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc, + testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc: + Use dg-require-swprintf. + 2009-07-24 Paolo Carlini <paolo.carlini@oracle.com> * testsuite/26_numerics/valarray/dr630-2.cc: Extend. diff --git a/libstdc++-v3/include/c_global/cwchar b/libstdc++-v3/include/c_global/cwchar index 14de5c4..f7f07c3 100644 --- a/libstdc++-v3/include/c_global/cwchar +++ b/libstdc++-v3/include/c_global/cwchar @@ -156,14 +156,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std) using ::mbsrtowcs; using ::putwc; using ::putwchar; +#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF using ::swprintf; +#endif using ::swscanf; using ::ungetwc; using ::vfwprintf; #if _GLIBCXX_HAVE_VFWSCANF using ::vfwscanf; #endif +#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF using ::vswprintf; +#endif #if _GLIBCXX_HAVE_VSWSCANF using ::vswscanf; #endif diff --git a/libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc b/libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc index d309d43..e1de06d 100644 --- a/libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc +++ b/libstdc++-v3/testsuite/21_strings/headers/cwchar/functions_std.cc @@ -1,5 +1,6 @@ // { dg-do compile } // { dg-require-c-std "" } +// { dg-require-swprintf "" } // Copyright (C) 2007, 2009 Free Software Foundation, Inc. // diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc index bf891fa..54b339e 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/wchar_t/4402.cc @@ -1,3 +1,5 @@ +// { dg-require-swprintf "" } + // Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc index 6d7e9d1..5df2990 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/wchar_t/error_code.cc @@ -1,4 +1,5 @@ // { dg-options "-std=gnu++0x" } +// { dg-require-swprintf "" } // Copyright (C) 2007, 2008, 2009 Free Software Foundation // diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp index ed7988d..6e8f74b 100644 --- a/libstdc++-v3/testsuite/lib/dg-options.exp +++ b/libstdc++-v3/testsuite/lib/dg-options.exp @@ -142,3 +142,12 @@ proc dg-require-string-conversions { args } { } return } + +proc dg-require-swprintf { args } { + if { ![ check_v3_target_swprintf ] } { + upvar dg-do-what dg-do-what + set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] + return + } + return +} diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index 45e92d7..eb15777 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -1374,3 +1374,61 @@ proc check_v3_target_string_conversions { } { verbose "check_v3_target_string_conversions: $et_string_conversions" 2 return $et_string_conversions } + +proc check_v3_target_swprintf { } { + global cxxflags + global DEFAULT_CXXFLAGS + global et_swprintf + + global tool + + if { ![info exists et_swprintf_target_name] } { + set et_swprintf_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_swprintf_target_name } { + verbose "check_v3_target_swprintf: `$et_swprintf_target_name'" 2 + set et_swprintf_target_name $current_target + if [info exists et_swprintf] { + verbose "check_v3_target_swprintf: removing cached result" 2 + unset et_swprintf + } + } + + if [info exists et_swprintf] { + verbose "check_v3_target_swprintf: using cached result" 2 + } else { + set et_swprintf 0 + + # Set up and compile a C++0x test program that depends + # on a standard swprintf function to be available. + set src swprintf[pid].cc + set exe swprintf[pid].exe + + set f [open $src "w"] + puts $f "#include <bits/c++config.h>" + puts $f "int main()" + puts $f "#if !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_swprintf 1 + } else { + verbose "check_v3_target_swprintf: compilation failed" 2 + } + } + verbose "check_v3_target_swprintf: $et_swprintf" 2 + return $et_swprintf +} |