diff --git a/contrib/libstdc++/ChangeLog b/contrib/libstdc++/ChangeLog index ba0c02b90b60..7aa047877ffc 100644 --- a/contrib/libstdc++/ChangeLog +++ b/contrib/libstdc++/ChangeLog @@ -1,3 +1,70 @@ +2007-07-19 Release Manager + + * GCC 4.2.1 released. + +2007-07-05 Joerg Richter + + PR libstdc++/31957 + * include/Makefile.am: Work around an AIX sed oddity. + * include/Makefile.in: Regenerate. + +2007-06-28 Paolo Carlini + + PR libstdc++/32509 + * acinclude.m4 (GLIBCXX_ENABLE_CLOCALE): Carry out the checks + involving the de_DE locale only if an auto locale config is + used for a target suitable for the gnu locale model. + * docs/html/install.html: Update. + * configure: Regenerated. + +2007-06-26 Benjamin Kosnik + + * include/ext/throw_allocator.h: Fixes for -fno-exceptions. + * testsuite/util/testsuite_shared.cc: Same. + * testsuite/util/io/illegal_input_error.hpp: Same. + * testsuite/util/io/verified_cmd_line_input.cc: Same. + + * libsupc++/typeinfo (type_info): Correct comment formatting, + clarify member access and public interface. + * libsupc++/exception: Less compressed comments. + * libsupc++/new: Same. + +2007-06-08 Paolo Carlini + + * docs/html/install.html: Adjust consistently with libstdc++/31717. + +2007-06-08 Francesco Palagi + + * include/std/std_fstream.h: Add Table 92 in comment. + +2007-06-06 Benjamin Kosnik + Frank Mori Hess + + * docs/html/debug.html: Correct link. + +2007-05-28 Benjamin Kosnik + + PR libstdc++/31717 + * acinclude.m4 (GLIBCXX_ENABLE_CLOCALE): Re-organize. Sanity check + gnu locale model requests to make sure it will work for the requested + target. Add checks for strxfrm_l, strerror_l when in gnu locale, + and strerror_r everywhere. + * aclocal.m4: Regenerated. + * configure: Regenerated. + * config.h.in: Regenerated. + +2007-05-24 Paolo Carlini + + * include/bits/ostream.tcc: Do not inhibit implicit instantiation + of __ostream_insert here... + * include/bits/ostream_insert.h: ... do it here. + +2007-05-21 Paolo Carlini + + PR libstdc++/31621 + * acinclude.m4 ([GLIBCXX_CHECK_LINKER_FEATURES]): Use the C compiler. + * configure: Regenerate. + 2007-05-13 Release Manager * GCC 4.2.0 released. diff --git a/contrib/libstdc++/acinclude.m4 b/contrib/libstdc++/acinclude.m4 index 214ce30fc81a..6b8aeb57f858 100644 --- a/contrib/libstdc++/acinclude.m4 +++ b/contrib/libstdc++/acinclude.m4 @@ -251,11 +251,9 @@ AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [ # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections]) @@ -1334,64 +1332,31 @@ dnl dnl Default is generic. dnl AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [ - AC_MSG_CHECKING([for C locale to use]) GLIBCXX_ENABLE(clocale,auto,[@<:@=MODEL@:>@], [use MODEL for target locale package], [permit generic|gnu|ieee_1003.1-2001|yes|no|auto]) + + # Deal with gettext issues. Default to not using it (=no) until we detect + # support for it later. Let the user turn it off via --e/d, but let that + # default to on for easier handling. + USE_NLS=no + AC_ARG_ENABLE(nls, + AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]), + [], + [enable_nls=yes]) - # If they didn't use this option switch, or if they specified --enable - # with no specific model, we'll have to look for one. If they - # specified --disable (???), do likewise. + # Either a known packaage, or "auto" if test $enable_clocale = no || test $enable_clocale = yes; then enable_clocale=auto fi - - # Either a known package, or "auto" enable_clocale_flag=$enable_clocale - # Probe for locale support if no specific model is specified. + # Probe for locale model to use if none specified. # Default to "generic". if test $enable_clocale_flag = auto; then case ${target_os} in linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) - AC_EGREP_CPP([_GLIBCXX_ok], [ - #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) - _GLIBCXX_ok - #endif - ], enable_clocale_flag=gnu, enable_clocale_flag=generic) - - # Test for bugs early in glibc-2.2.x series - if test $enable_clocale_flag = gnu; then - AC_TRY_RUN([ - #define _GNU_SOURCE 1 - #include - #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) - extern __typeof(newlocale) __newlocale; - extern __typeof(duplocale) __duplocale; - extern __typeof(strcoll_l) __strcoll_l; - #endif - int main() - { - const char __one[] = "Äuglein Augmen"; - const char __two[] = "Äuglein"; - int i; - int j; - __locale_t loc; - __locale_t loc_dup; - loc = __newlocale(1 << LC_ALL, "de_DE", 0); - loc_dup = __duplocale(loc); - i = __strcoll_l(__one, __two, loc); - j = __strcoll_l(__one, __two, loc_dup); - return 0; - } - ], - [enable_clocale_flag=gnu],[enable_clocale_flag=generic], - [enable_clocale_flag=generic]) - fi - - # ... at some point put __strxfrm_l tests in as well. + enable_clocale_flag=gnu ;; darwin* | freebsd*) enable_clocale_flag=darwin @@ -1402,16 +1367,81 @@ AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [ esac fi - # Deal with gettext issues. Default to not using it (=no) until we detect - # support for it later. Let the user turn it off via --e/d, but let that - # default to on for easier handling. - USE_NLS=no - AC_ARG_ENABLE(nls, - AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]), - [], - [enable_nls=yes]) + # Sanity check model, and test for special functionality. + if test $enable_clocale_flag = gnu; then + AC_EGREP_CPP([_GLIBCXX_ok], [ + #include + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) + _GLIBCXX_ok + #endif + ], enable_clocale_flag=gnu, enable_clocale_flag=generic) + + if test $enable_clocale = auto; then + # Test for bugs early in glibc-2.2.x series + AC_TRY_RUN([ + #define _GNU_SOURCE 1 + #include + #include + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + extern __typeof(newlocale) __newlocale; + extern __typeof(duplocale) __duplocale; + extern __typeof(strcoll_l) __strcoll_l; + #endif + int main() + { + const char __one[] = "Äuglein Augmen"; + const char __two[] = "Äuglein"; + int i; + int j; + __locale_t loc; + __locale_t loc_dup; + loc = __newlocale(1 << LC_ALL, "de_DE", 0); + loc_dup = __duplocale(loc); + i = __strcoll_l(__one, __two, loc); + j = __strcoll_l(__one, __two, loc_dup); + return 0; + } + ], + [enable_clocale_flag=gnu],[enable_clocale_flag=generic], + [enable_clocale_flag=generic]) + fi + + # Set it to scream when it hurts. + ac_save_CFLAGS="$CFLAGS" + CFLAGS="-Wimplicit-function-declaration -Werror" + + # Use strxfrm_l if available. + AC_TRY_COMPILE([#define _GNU_SOURCE 1 + #include + #include ], + [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);], + AC_DEFINE(HAVE_STRXFRM_L, 1, + [Define if strxfrm_l is available in .]),) + + # Use strerror_l if available. + AC_TRY_COMPILE([#define _GNU_SOURCE 1 + #include + #include ], + [__locale_t loc; strerror_l(5, loc);], + AC_DEFINE(HAVE_STRERROR_L, 1, + [Define if strerror_l is available in .]),) + + CFLAGS="$ac_save_CFLAGS" + fi + + # Perhaps use strerror_r if available, and strerror_l isn't. + ac_save_CFLAGS="$CFLAGS" + CFLAGS="-Wimplicit-function-declaration -Werror" + AC_TRY_COMPILE([#define _GNU_SOURCE 1 + #include + #include ], + [char s[128]; strerror_r(5, s, 128);], + AC_DEFINE(HAVE_STRERROR_R, 1, + [Define if strerror_r is available in .]),) + CFLAGS="$ac_save_CFLAGS" # Set configure bits for specified locale package + AC_MSG_CHECKING([for C locale to use]) case ${enable_clocale_flag} in generic) AC_MSG_RESULT(generic) diff --git a/contrib/libstdc++/config.h.in b/contrib/libstdc++/config.h.in index 7fa144b2b939..4eea4e80eded 100644 --- a/contrib/libstdc++/config.h.in +++ b/contrib/libstdc++/config.h.in @@ -298,6 +298,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H +/* Define if strerror_l is available in . */ +#undef HAVE_STRERROR_L + +/* Define if strerror_r is available in . */ +#undef HAVE_STRERROR_R + /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H @@ -310,6 +316,9 @@ /* Define to 1 if you have the `strtold' function. */ #undef HAVE_STRTOLD +/* Define if strxfrm_l is available in . */ +#undef HAVE_STRXFRM_L + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILIO_H diff --git a/contrib/libstdc++/configure b/contrib/libstdc++/configure index faa920de7114..03a7f2b58de7 100755 --- a/contrib/libstdc++/configure +++ b/contrib/libstdc++/configure @@ -5764,8 +5764,6 @@ done - echo "$as_me:$LINENO: checking for C locale to use" >&5 -echo $ECHO_N "checking for C locale to use... $ECHO_C" >&6 # Check whether --enable-clocale or --disable-clocale was given. if test "${enable_clocale+set}" = set; then enableval="$enable_clocale" @@ -5782,32 +5780,53 @@ else fi; - # If they didn't use this option switch, or if they specified --enable - # with no specific model, we'll have to look for one. If they - # specified --disable (???), do likewise. + # Deal with gettext issues. Default to not using it (=no) until we detect + # support for it later. Let the user turn it off via --e/d, but let that + # default to on for easier handling. + USE_NLS=no + # Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + +else + enable_nls=yes +fi; + + # Either a known packaage, or "auto" if test $enable_clocale = no || test $enable_clocale = yes; then enable_clocale=auto fi - - # Either a known package, or "auto" enable_clocale_flag=$enable_clocale - # Probe for locale support if no specific model is specified. + # Probe for locale model to use if none specified. # Default to "generic". if test $enable_clocale_flag = auto; then case ${target_os} in linux* | gnu* | kfreebsd*-gnu | knetbsd*-gnu) - cat >conftest.$ac_ext <<_ACEOF + enable_clocale_flag=gnu + ;; + darwin* | freebsd*) + enable_clocale_flag=darwin + ;; + *) + enable_clocale_flag=generic + ;; + esac + fi + + # Sanity check model, and test for special functionality. + if test $enable_clocale_flag = gnu; then + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) - _GLIBCXX_ok - #endif + #include + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) + _GLIBCXX_ok + #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | @@ -5819,9 +5838,9 @@ fi rm -f conftest* - # Test for bugs early in glibc-2.2.x series - if test $enable_clocale_flag = gnu; then - if test "$cross_compiling" = yes; then + if test $enable_clocale = auto; then + # Test for bugs early in glibc-2.2.x series + if test "$cross_compiling" = yes; then enable_clocale_flag=generic else cat >conftest.$ac_ext <<_ACEOF @@ -5831,28 +5850,28 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - #define _GNU_SOURCE 1 - #include - #include - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) - extern __typeof(newlocale) __newlocale; - extern __typeof(duplocale) __duplocale; - extern __typeof(strcoll_l) __strcoll_l; - #endif - int main() - { - const char __one[] = "Äuglein Augmen"; - const char __two[] = "Äuglein"; - int i; - int j; - __locale_t loc; - __locale_t loc_dup; - loc = __newlocale(1 << LC_ALL, "de_DE", 0); - loc_dup = __duplocale(loc); - i = __strcoll_l(__one, __two, loc); - j = __strcoll_l(__one, __two, loc_dup); - return 0; - } + #define _GNU_SOURCE 1 + #include + #include + #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) + extern __typeof(newlocale) __newlocale; + extern __typeof(duplocale) __duplocale; + extern __typeof(strcoll_l) __strcoll_l; + #endif + int main() + { + const char __one[] = "Äuglein Augmen"; + const char __two[] = "Äuglein"; + int i; + int j; + __locale_t loc; + __locale_t loc_dup; + loc = __newlocale(1 << LC_ALL, "de_DE", 0); + loc_dup = __duplocale(loc); + i = __strcoll_l(__one, __two, loc); + j = __strcoll_l(__one, __two, loc_dup); + return 0; + } _ACEOF rm -f conftest$ac_exeext @@ -5877,32 +5896,177 @@ enable_clocale_flag=generic fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi - fi + fi - # ... at some point put __strxfrm_l tests in as well. - ;; - darwin* | freebsd*) - enable_clocale_flag=darwin - ;; - *) - enable_clocale_flag=generic - ;; - esac - fi + # Set it to scream when it hurts. + ac_save_CFLAGS="$CFLAGS" + CFLAGS="-Wimplicit-function-declaration -Werror" - # Deal with gettext issues. Default to not using it (=no) until we detect - # support for it later. Let the user turn it off via --e/d, but let that - # default to on for easier handling. - USE_NLS=no - # Check whether --enable-nls or --disable-nls was given. -if test "${enable_nls+set}" = set; then - enableval="$enable_nls" + # Use strxfrm_l if available. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _GNU_SOURCE 1 + #include + #include +int +main () +{ +char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRXFRM_L 1 +_ACEOF else - enable_nls=yes -fi; + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + + # Use strerror_l if available. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _GNU_SOURCE 1 + #include + #include +int +main () +{ +__locale_t loc; strerror_l(5, loc); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRERROR_L 1 +_ACEOF + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$ac_save_CFLAGS" + fi + + # Perhaps use strerror_r if available, and strerror_l isn't. + ac_save_CFLAGS="$CFLAGS" + CFLAGS="-Wimplicit-function-declaration -Werror" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _GNU_SOURCE 1 + #include + #include +int +main () +{ +char s[128]; strerror_r(5, s, 128); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STRERROR_R 1 +_ACEOF + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" # Set configure bits for specified locale package + echo "$as_me:$LINENO: checking for C locale to use" >&5 +echo $ECHO_N "checking for C locale to use... $ECHO_C" >&6 case ${enable_clocale_flag} in generic) echo "$as_me:$LINENO: result: generic" >&5 @@ -8015,7 +8179,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style. cat > conftest.$ac_ext << EOF -#line 8018 "configure" +#line 8182 "configure" int main() { // NB: _Atomic_word not necessarily int. @@ -8395,11 +8559,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -54307,11 +54469,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -75669,11 +75829,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -77194,11 +77352,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -78687,11 +78843,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -100579,11 +100733,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -101426,11 +101578,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -102829,11 +102979,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -104624,11 +104772,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -105869,11 +106015,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 @@ -106898,11 +107042,9 @@ echo "${ECHO_T}$glibcxx_gnu_ld_version" >&6 # NB: This flag only works reliably after 2.16.1. Configure tests # for this are difficult, so hard wire a value that should work. - # All these tests are for C++, but run with the "C" compiler driver. - # Need to do this so that g++ won't try to link in libstdc++/libsupc++. ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" - CFLAGS='-x c++ -Wl,--gc-sections' + CFLAGS='-Wl,--gc-sections' # Check for -Wl,--gc-sections echo "$as_me:$LINENO: checking for ld that supports -Wl,--gc-sections" >&5 diff --git a/contrib/libstdc++/include/Makefile.am b/contrib/libstdc++/include/Makefile.am index 19d170ba0a19..6ba5a5491239 100644 --- a/contrib/libstdc++/include/Makefile.am +++ b/contrib/libstdc++/include/Makefile.am @@ -986,6 +986,8 @@ stamp-visibility: echo 0 > stamp-visibility endif +# NB: The non-empty default ldbl_compat works around an AIX sed +# oddity, see libstdc++/31957 for details. ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ ${glibcxx_srcdir}/include/bits/c++config \ stamp-${host_alias} \ @@ -995,7 +997,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ @date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\ nsa_version=`cat stamp-namespace-version` ;\ visibility=`cat stamp-visibility` ;\ - ldbl_compat='' ;\ + ldbl_compat='s,g,g,' ;\ grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \ ${CONFIG_HEADER} > /dev/null 2>&1 \ && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\ diff --git a/contrib/libstdc++/include/Makefile.in b/contrib/libstdc++/include/Makefile.in index 6cf6fc37ff67..12ed4d3a8aef 100644 --- a/contrib/libstdc++/include/Makefile.in +++ b/contrib/libstdc++/include/Makefile.in @@ -1363,6 +1363,8 @@ stamp-host: ${host_headers} ${host_headers_noinst} stamp-${host_alias} @ENABLE_VISIBILITY_FALSE@stamp-visibility: @ENABLE_VISIBILITY_FALSE@ echo 0 > stamp-visibility +# NB: The non-empty default ldbl_compat works around an AIX sed +# oddity, see libstdc++/31957 for details. ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ ${glibcxx_srcdir}/include/bits/c++config \ stamp-${host_alias} \ @@ -1372,7 +1374,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \ @date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\ nsa_version=`cat stamp-namespace-version` ;\ visibility=`cat stamp-visibility` ;\ - ldbl_compat='' ;\ + ldbl_compat='s,g,g,' ;\ grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \ ${CONFIG_HEADER} > /dev/null 2>&1 \ && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\ diff --git a/contrib/libstdc++/include/bits/ostream.tcc b/contrib/libstdc++/include/bits/ostream.tcc index 36853e84bf39..c7a2e91295ef 100644 --- a/contrib/libstdc++/include/bits/ostream.tcc +++ b/contrib/libstdc++/include/bits/ostream.tcc @@ -334,7 +334,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) extern template ostream& operator<<(ostream&, const char*); extern template ostream& operator<<(ostream&, const unsigned char*); extern template ostream& operator<<(ostream&, const signed char*); - extern template ostream& __ostream_insert(ostream&, const char*, streamsize); extern template ostream& ostream::_M_insert(long); extern template ostream& ostream::_M_insert(unsigned long); @@ -356,8 +355,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) extern template wostream& operator<<(wostream&, char); extern template wostream& operator<<(wostream&, const wchar_t*); extern template wostream& operator<<(wostream&, const char*); - extern template wostream& __ostream_insert(wostream&, const wchar_t*, - streamsize); extern template wostream& wostream::_M_insert(long); extern template wostream& wostream::_M_insert(unsigned long); diff --git a/contrib/libstdc++/include/bits/ostream_insert.h b/contrib/libstdc++/include/bits/ostream_insert.h index f3ed801bbc3d..e9e83fbc51f0 100644 --- a/contrib/libstdc++/include/bits/ostream_insert.h +++ b/contrib/libstdc++/include/bits/ostream_insert.h @@ -109,6 +109,18 @@ _GLIBCXX_BEGIN_NAMESPACE(std) return __out; } + // Inhibit implicit instantiations for required instantiations, + // which are defined via explicit instantiations elsewhere. + // NB: This syntax is a GNU extension. +#if _GLIBCXX_EXTERN_TEMPLATE + extern template ostream& __ostream_insert(ostream&, const char*, streamsize); + +#ifdef _GLIBCXX_USE_WCHAR_T + extern template wostream& __ostream_insert(wostream&, const wchar_t*, + streamsize); +#endif +#endif + _GLIBCXX_END_NAMESPACE #endif /* _OSTREAM_INSERT_H */ diff --git a/contrib/libstdc++/include/ext/throw_allocator.h b/contrib/libstdc++/include/ext/throw_allocator.h index 112fb739d705..5886afc79899 100644 --- a/contrib/libstdc++/include/ext/throw_allocator.h +++ b/contrib/libstdc++/include/ext/throw_allocator.h @@ -62,6 +62,7 @@ #include #include #include +#include _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) @@ -81,10 +82,20 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) std::tr1::mt19937 _M_generator; }; - struct forced_exception_error : public std::exception { }; + // Substitute for concurrence_error object in the case of -fno-exceptions. + inline void + __throw_forced_exception_error() + { +#if __EXCEPTIONS + throw forced_exception_error(); +#else + __builtin_abort(); +#endif + } + class throw_allocator_base { public: @@ -325,7 +336,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) error += '\n'; print_to_string(error, make_entry(p, size)); print_to_string(error, *found_it); - throw std::logic_error(error); + std::__throw_logic_error(error.c_str()); } _S_map.insert(make_entry(p, size)); } @@ -351,7 +362,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) error += "null erase!"; error += '\n'; print_to_string(error, make_entry(p, size)); - throw std::logic_error(error); + std::__throw_logic_error(error.c_str()); } if (found_it->second.second != size) @@ -361,7 +372,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) error += '\n'; print_to_string(error, make_entry(p, size)); print_to_string(error, *found_it); - throw std::logic_error(error); + std::__throw_logic_error(error.c_str()); } } @@ -382,7 +393,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) std::string error("throw_allocator_base::check_allocated by label "); error += '\n'; error += found; - throw std::logic_error(error); + std::__throw_logic_error(error.c_str()); } } @@ -390,7 +401,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) throw_allocator_base::throw_conditionally() { if (_S_g.get_prob() < _S_throw_prob) - throw forced_exception_error(); + __throw_forced_exception_error(); } void diff --git a/contrib/libstdc++/include/std/std_fstream.h b/contrib/libstdc++/include/std/std_fstream.h index f664f2de9f4e..0c81633f50bf 100644 --- a/contrib/libstdc++/include/std/std_fstream.h +++ b/contrib/libstdc++/include/std/std_fstream.h @@ -1,6 +1,7 @@ // File based streams -*- C++ -*- -// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, +// 2006, 2007 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -257,9 +258,30 @@ _GLIBCXX_BEGIN_NAMESPACE(std) * Otherwise it tries to open the file named @a s using the flags * given in @a mode. * - * [Table 92 gives the relation between openmode combinations and the - * equivalent fopen() flags, but the table has not been copied yet.] - */ + * Table 92, adapted here, gives the relation between openmode + * combinations and the equivalent fopen() flags. + * (NB: lines in|out|app and binary|in|out|app per DR 596) + * +---------------------------------------------------------+ + * | ios_base Flag combination stdio equivalent | + * |binary in out trunc app | + * +---------------------------------------------------------+ + * | + "w" | + * | + + "a" | + * | + + "w" | + * | + "r" | + * | + + "r+" | + * | + + + "w+" | + * | + + + "a+" | + * +---------------------------------------------------------+ + * | + + "wb" | + * | + + + "ab" | + * | + + + "wb" | + * | + + "rb" | + * | + + + "r+b" | + * | + + + + "w+b" | + * | + + + + "a+b" | + * +---------------------------------------------------------+ + */ __filebuf_type* open(const char* __s, ios_base::openmode __mode); diff --git a/contrib/libstdc++/libsupc++/exception b/contrib/libstdc++/libsupc++/exception index 2046300581c6..a7e2db78dd19 100644 --- a/contrib/libstdc++/libsupc++/exception +++ b/contrib/libstdc++/libsupc++/exception @@ -58,6 +58,7 @@ namespace std public: exception() throw() { } virtual ~exception() throw(); + /** Returns a C-style character string describing the general cause * of the current error. */ virtual const char* what() const throw(); @@ -69,26 +70,31 @@ namespace std { public: bad_exception() throw() { } + // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_exception() throw(); + // See comment in eh_exception.cc. virtual const char* what() const throw(); }; /// If you write a replacement %terminate handler, it must be of this type. typedef void (*terminate_handler) (); + /// If you write a replacement %unexpected handler, it must be of this type. typedef void (*unexpected_handler) (); /// Takes a new handler function as an argument, returns the old function. terminate_handler set_terminate(terminate_handler) throw(); + /** The runtime will call this function if %exception handling must be * abandoned for any reason. It can also be called by the user. */ void terminate() __attribute__ ((__noreturn__)); /// Takes a new handler function as an argument, returns the old function. unexpected_handler set_unexpected(unexpected_handler) throw(); + /** The runtime will call this function if an %exception is thrown which * violates the function's %exception specification. */ void unexpected() __attribute__ ((__noreturn__)); diff --git a/contrib/libstdc++/libsupc++/new b/contrib/libstdc++/libsupc++/new index 26898bfc6fca..a821783b14a6 100644 --- a/contrib/libstdc++/libsupc++/new +++ b/contrib/libstdc++/libsupc++/new @@ -59,19 +59,25 @@ namespace std { public: bad_alloc() throw() { } + // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_alloc() throw(); + // See comment in eh_exception.cc. virtual const char* what() const throw(); }; struct nothrow_t { }; + extern const nothrow_t nothrow; + /** If you write your own error handler to be called by @c new, it must * be of this type. */ typedef void (*new_handler)(); - /// Takes a replacement handler as the argument, returns the previous handler. + + /// Takes a replacement handler as the argument, returns the + /// previous handler. new_handler set_new_handler(new_handler) throw(); } // namespace std diff --git a/contrib/libstdc++/libsupc++/typeinfo b/contrib/libstdc++/libsupc++/typeinfo index 1dde7f196793..90ac18a801f2 100644 --- a/contrib/libstdc++/libsupc++/typeinfo +++ b/contrib/libstdc++/libsupc++/typeinfo @@ -68,25 +68,12 @@ namespace std class type_info { public: - /** Destructor. Being the first non-inline virtual function, this + /** Destructor first. Being the first non-inline virtual function, this * controls in which translation unit the vtable is emitted. The * compiler makes use of that information to know where to emit * the runtime-mandated type_info structures in the new-abi. */ virtual ~type_info(); - private: - /// Assigning type_info is not supported. Made private. - type_info& operator=(const type_info&); - type_info(const type_info&); - - protected: - const char *__name; - - protected: - explicit type_info(const char *__n): __name(__n) { } - - public: - // the public interface /** Returns an @e implementation-defined byte string; this is not * portable between compilers! */ const char* name() const @@ -94,6 +81,7 @@ namespace std #if !__GXX_MERGED_TYPEINFO_NAMES bool before(const type_info& __arg) const; + // In old abi, or when weak symbols are not supported, there can // be multiple instances of a type_info object for one // type. Uniqueness must use the _name value, not object address. @@ -105,19 +93,13 @@ namespace std // and therefore address comparisons are sufficient. bool before(const type_info& __arg) const { return __name < __arg.__name; } + bool operator==(const type_info& __arg) const { return __name == __arg.__name; } #endif bool operator!=(const type_info& __arg) const { return !operator==(__arg); } - // the internal interface - public: - // return true if this is a pointer type of some kind - virtual bool __is_pointer_p() const; - // return true if this is a function type - virtual bool __is_function_p() const; - // Try and catch a thrown type. Store an adjusted pointer to the // caught type in THR_OBJ. If THR_TYPE is not a pointer type, then // THR_OBJ points to the thrown object. If THR_TYPE is a pointer @@ -127,9 +109,25 @@ namespace std virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, unsigned __outer) const; - // internally used during catch matching + // Internally used during catch matching virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, void **__obj_ptr) const; + + // Return true if this is a pointer type of some kind + virtual bool __is_pointer_p() const; + + // Return true if this is a function type + virtual bool __is_function_p() const; + + protected: + const char *__name; + + explicit type_info(const char *__n): __name(__n) { } + + private: + /// Assigning type_info is not supported. + type_info& operator=(const type_info&); + type_info(const type_info&); }; /** @@ -141,9 +139,11 @@ namespace std { public: bad_cast() throw() { } + // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_cast() throw(); + // See comment in eh_exception.cc. virtual const char* what() const throw(); }; @@ -153,9 +153,11 @@ namespace std { public: bad_typeid () throw() { } + // This declaration is not useless: // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118 virtual ~bad_typeid() throw(); + // See comment in eh_exception.cc. virtual const char* what() const throw(); };