Commit 2799d972 by Benjamin Kosnik Committed by Benjamin Kosnik

re PR libstdc++/48698 (gnu-versioned-namespace problems)

2011-09-26  Benjamin Kosnik  <bkoz@redhat.com
            Jonathan Wakely  <jwakely.gcc@gmail.com>

	PR libstdc++/48698
	* acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Set libtool_VERSION here.
	* configure.ac: Move AC_SUBST of libtool_VERSION past call to
	GLIBCXX_ENABLE_SYMVERS.
	* configure: Regenerate.
	* include/bits/c++config: Use __7 as versioned namespace name.
	* config/abi/pre/gnu-versioned-namespace.ver: Change mangling as
	per above.
	* include/c_global/cwchar: Adjust nested namespaces.
	* testsuite/20_util/bind/48698.cc: Add test case.
	* testsuite/ext/profile/mutex_extensions_neg.cc: Change line number.

From-SVN: r179221
parent 59d605ad
2011-09-25 Benjamin Kosnik <bkoz@redhat.com
Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/48698
* acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Set libtool_VERSION here.
* configure.ac: Move AC_SUBST of libtool_VERSION past call to
GLIBCXX_ENABLE_SYMVERS.
* configure: Regenerate.
* include/bits/c++config: Use __7 as versioned namespace name.
* config/abi/pre/gnu-versioned-namespace.ver: Change mangling as
per above.
* include/c_global/cwchar: Adjust nested namespaces.
* testsuite/20_util/bind/48698.cc: Add test case.
* testsuite/ext/profile/mutex_extensions_neg.cc: Change line number.
2011-09-25 Paolo Carlini <paolo.carlini@oracle.com> 2011-09-25 Paolo Carlini <paolo.carlini@oracle.com>
Revert (no longer necessary post r179130): Revert (no longer necessary post r179130):
......
...@@ -3054,10 +3054,15 @@ dnl ...@@ -3054,10 +3054,15 @@ dnl
dnl Add version tags to symbols in shared library (or not), additionally dnl Add version tags to symbols in shared library (or not), additionally
dnl marking other symbols as private/local (or not). dnl marking other symbols as private/local (or not).
dnl dnl
dnl Sets libtool_VERSION, and determines shared library SONAME.
dnl
dnl This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
dnl
dnl --enable-symvers=style adds a version script to the linker call when dnl --enable-symvers=style adds a version script to the linker call when
dnl creating the shared library. The choice of version script is dnl creating the shared library. The choice of version script is
dnl controlled by 'style'. dnl controlled by 'style'.
dnl --disable-symvers does not. dnl --disable-symvers does not.
dnl
dnl + Usage: GLIBCXX_ENABLE_SYMVERS[(DEFAULT)] dnl + Usage: GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to
dnl choose a default style based on linker characteristics. Passing dnl choose a default style based on linker characteristics. Passing
...@@ -3194,7 +3199,10 @@ changequote([,])dnl ...@@ -3194,7 +3199,10 @@ changequote([,])dnl
fi fi
fi fi
# Everything parsed; figure out what file to use. # For libtool versioning info, format is CURRENT:REVISION:AGE
libtool_VERSION=6:17:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in case $enable_symvers in
no) no)
SYMVER_FILE=config/abi/pre/none.ver SYMVER_FILE=config/abi/pre/none.ver
...@@ -3205,6 +3213,7 @@ case $enable_symvers in ...@@ -3205,6 +3213,7 @@ case $enable_symvers in
[Define to use GNU versioning in the shared library.]) [Define to use GNU versioning in the shared library.])
;; ;;
gnu-versioned-namespace) gnu-versioned-namespace)
libtool_VERSION=7:0:0
SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1, AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
[Define to use GNU namespace versioning in the shared library.]) [Define to use GNU namespace versioning in the shared library.])
......
...@@ -20,23 +20,23 @@ ...@@ -20,23 +20,23 @@
## with this library; see the file COPYING3. If not see ## with this library; see the file COPYING3. If not see
## <http://www.gnu.org/licenses/>. ## <http://www.gnu.org/licenses/>.
GLIBCXX_5.0 { GLIBCXX_7.0 {
global: global:
# Names inside the 'extern' block are demangled names. # Names inside the 'extern' block are demangled names.
extern "C++" extern "C++"
{ {
std::_6::*; std::__7::*;
std::* std::*
}; };
# locale # locale
_ZNSt2_69has_facetINS_*; _ZNSt3__79has_facetINS_*;
# hash # hash
_ZNSt8__detail2_612__prime_listE; _ZNSt8__detail3__712__prime_listE;
_ZNSt3tr18__detail2_612__prime_listE; _ZNSt3tr18__detail3__712__prime_listE;
# thread/mutex/condition_variable/future # thread/mutex/condition_variable/future
__once_proxy; __once_proxy;
...@@ -73,41 +73,41 @@ GLIBCXX_5.0 { ...@@ -73,41 +73,41 @@ GLIBCXX_5.0 {
_ZTv0_n*; _ZTv0_n*;
# std::__detail::_List_node_base # std::__detail::_List_node_base
_ZNSt8__detail2_615_List_node_base7_M_hook*; _ZNSt8__detail3__715_List_node_base7_M_hook*;
_ZNSt8__detail2_615_List_node_base9_M_unhookEv; _ZNSt8__detail3__715_List_node_base9_M_unhookEv;
_ZNSt8__detail2_615_List_node_base10_M_reverseEv; _ZNSt8__detail3__715_List_node_base10_M_reverseEv;
_ZNSt8__detail2_615_List_node_base11_M_transfer*; _ZNSt8__detail3__715_List_node_base11_M_transfer*;
_ZNSt8__detail2_615_List_node_base4swapER*; _ZNSt8__detail3__715_List_node_base4swapER*;
# std::__convert_to_v # std::__convert_to_v
_ZNSt2_614__convert_to_v*; _ZNSt3__714__convert_to_v*;
# std::__copy_streambufs # std::__copy_streambufs
_ZNSt2_617__copy_streambufsI*; _ZNSt3__717__copy_streambufsI*;
_ZNSt2_621__copy_streambufs_eofI*; _ZNSt3__721__copy_streambufs_eofI*;
# __gnu_cxx::__atomic_add # __gnu_cxx::__atomic_add
# __gnu_cxx::__exchange_and_add # __gnu_cxx::__exchange_and_add
_ZN9__gnu_cxx2_612__atomic_addEPV[il][il]; _ZN9__gnu_cxx3__712__atomic_addEPV[il][il];
_ZN9__gnu_cxx2_618__exchange_and_addEPV[li][il]; _ZN9__gnu_cxx3__718__exchange_and_addEPV[li][il];
# __gnu_cxx::__pool # __gnu_cxx::__pool
_ZN9__gnu_cxx2_66__poolILb[01]EE13_M_initializeEv; _ZN9__gnu_cxx3__76__poolILb[01]EE13_M_initializeEv;
_ZN9__gnu_cxx2_66__poolILb[01]EE16_M_reserve_blockE[jm][jm]; _ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reserve_blockE[jm][jm];
_ZN9__gnu_cxx2_66__poolILb[01]EE16_M_reclaim_blockEPc[jm]; _ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reclaim_blockEPc[jm];
_ZN9__gnu_cxx2_66__poolILb[01]EE10_M_destroyEv; _ZN9__gnu_cxx3__76__poolILb[01]EE10_M_destroyEv;
_ZN9__gnu_cxx2_66__poolILb1EE16_M_get_thread_idEv; _ZN9__gnu_cxx3__76__poolILb1EE16_M_get_thread_idEv;
_ZN9__gnu_cxx2_617__pool_alloc_base9_M_refillE[jm]; _ZN9__gnu_cxx3__717__pool_alloc_base9_M_refillE[jm];
_ZN9__gnu_cxx2_617__pool_alloc_base16_M_get_free_listE[jm]; _ZN9__gnu_cxx3__717__pool_alloc_base16_M_get_free_listE[jm];
_ZN9__gnu_cxx2_617__pool_alloc_base12_M_get_mutexEv; _ZN9__gnu_cxx3__717__pool_alloc_base12_M_get_mutexEv;
_ZN9__gnu_cxx2_69free_list6_M_getE[jm]; _ZN9__gnu_cxx3__79free_list6_M_getE[jm];
_ZN9__gnu_cxx2_69free_list8_M_clearEv; _ZN9__gnu_cxx3__79free_list8_M_clearEv;
# __gnu_cxx::stdio_sync_filebuf # __gnu_cxx::stdio_sync_filebuf
_ZTVN9__gnu_cxx2_618stdio_sync_filebufI[cw]St2_611char_traitsI[cw]EEE; _ZTVN9__gnu_cxx3__718stdio_sync_filebufI[cw]St3__711char_traitsI[cw]EEE;
_ZN9__gnu_cxx2_618stdio_sync_filebufI[cw]NSt2_611char_traitsI[cw]EEE[5-9]*; _ZN9__gnu_cxx3__718stdio_sync_filebufI[cw]NSt3__711char_traitsI[cw]EEE[5-9]*;
# debug mode # debug mode
_ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv; _ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv;
...@@ -212,7 +212,7 @@ CXXABI_2.0 { ...@@ -212,7 +212,7 @@ CXXABI_2.0 {
_ZSt15_Fnv_hash_bytesPKv*; _ZSt15_Fnv_hash_bytesPKv*;
# __gnu_cxx::_verbose_terminate_handler() # __gnu_cxx::_verbose_terminate_handler()
_ZN9__gnu_cxx2_627__verbose_terminate_handlerEv; _ZN9__gnu_cxx3__727__verbose_terminate_handlerEv;
# *_type_info classes, ctor and dtor # *_type_info classes, ctor and dtor
_ZN10__cxxabiv117__array_type_info*; _ZN10__cxxabiv117__array_type_info*;
......
...@@ -645,6 +645,7 @@ GLIBCXX_LDBL_COMPAT_FALSE ...@@ -645,6 +645,7 @@ GLIBCXX_LDBL_COMPAT_FALSE
GLIBCXX_LDBL_COMPAT_TRUE GLIBCXX_LDBL_COMPAT_TRUE
ENABLE_VISIBILITY_FALSE ENABLE_VISIBILITY_FALSE
ENABLE_VISIBILITY_TRUE ENABLE_VISIBILITY_TRUE
libtool_VERSION
ENABLE_SYMVERS_SOL2_FALSE ENABLE_SYMVERS_SOL2_FALSE
ENABLE_SYMVERS_SOL2_TRUE ENABLE_SYMVERS_SOL2_TRUE
ENABLE_SYMVERS_SUN_FALSE ENABLE_SYMVERS_SUN_FALSE
...@@ -788,7 +789,6 @@ build_vendor ...@@ -788,7 +789,6 @@ build_vendor
build_cpu build_cpu
build build
multi_basedir multi_basedir
libtool_VERSION
target_alias target_alias
host_alias host_alias
build_alias build_alias
...@@ -2825,10 +2825,6 @@ ac_config_headers="$ac_config_headers config.h" ...@@ -2825,10 +2825,6 @@ ac_config_headers="$ac_config_headers config.h"
# exported. Only used at the end of this file. # exported. Only used at the end of this file.
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD ### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
# For libtool versioning info, format is CURRENT:REVISION:AGE
libtool_VERSION=6:17:0
# Find the rest of the source tree framework. # Find the rest of the source tree framework.
# Default to --enable-multilib # Default to --enable-multilib
# Check whether --enable-multilib was given. # Check whether --enable-multilib was given.
...@@ -11489,7 +11485,7 @@ else ...@@ -11489,7 +11485,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11492 "configure" #line 11488 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -11595,7 +11591,7 @@ else ...@@ -11595,7 +11591,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11598 "configure" #line 11594 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -14953,7 +14949,7 @@ fi ...@@ -14953,7 +14949,7 @@ fi
# #
# Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style. # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 14956 "configure" #line 14952 "configure"
struct S { ~S(); }; struct S { ~S(); };
void bar(); void bar();
void foo() void foo()
...@@ -15321,7 +15317,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; } ...@@ -15321,7 +15317,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does. # Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 15324 "configure" #line 15320 "configure"
int main() int main()
{ {
typedef bool atomic_type; typedef bool atomic_type;
...@@ -15358,7 +15354,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; } ...@@ -15358,7 +15354,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest* rm -f conftest*
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 15361 "configure" #line 15357 "configure"
int main() int main()
{ {
typedef short atomic_type; typedef short atomic_type;
...@@ -15395,7 +15391,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; } ...@@ -15395,7 +15391,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest* rm -f conftest*
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 15398 "configure" #line 15394 "configure"
int main() int main()
{ {
// NB: _Atomic_word not necessarily int. // NB: _Atomic_word not necessarily int.
...@@ -15433,7 +15429,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; } ...@@ -15433,7 +15429,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest* rm -f conftest*
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 15436 "configure" #line 15432 "configure"
int main() int main()
{ {
typedef long long atomic_type; typedef long long atomic_type;
...@@ -15509,7 +15505,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu ...@@ -15509,7 +15505,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
# unnecessary for this test. # unnecessary for this test.
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 15512 "configure" #line 15508 "configure"
int main() int main()
{ {
_Decimal32 d1; _Decimal32 d1;
...@@ -15551,7 +15547,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ...@@ -15551,7 +15547,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test. # unnecessary for this test.
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 15554 "configure" #line 15550 "configure"
template<typename T1, typename T2> template<typename T1, typename T2>
struct same struct same
{ typedef T2 type; }; { typedef T2 type; };
...@@ -15585,7 +15581,7 @@ $as_echo "$enable_int128" >&6; } ...@@ -15585,7 +15581,7 @@ $as_echo "$enable_int128" >&6; }
rm -f conftest* rm -f conftest*
cat > conftest.$ac_ext << EOF cat > conftest.$ac_ext << EOF
#line 15588 "configure" #line 15584 "configure"
template<typename T1, typename T2> template<typename T1, typename T2>
struct same struct same
{ typedef T2 type; }; { typedef T2 type; };
...@@ -63971,7 +63967,6 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h ...@@ -63971,7 +63967,6 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h
fi fi
# Check whether --enable-linux-futex was given. # Check whether --enable-linux-futex was given.
if test "${enable_linux_futex+set}" = set; then : if test "${enable_linux_futex+set}" = set; then :
enableval=$enable_linux_futex; enableval=$enable_linux_futex;
...@@ -64497,7 +64492,6 @@ ac_config_commands="$ac_config_commands include/gstdint.h" ...@@ -64497,7 +64492,6 @@ ac_config_commands="$ac_config_commands include/gstdint.h"
# This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU c++filt" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU c++filt" >&5
$as_echo_n "checking for GNU c++filt... " >&6; } $as_echo_n "checking for GNU c++filt... " >&6; }
...@@ -64735,7 +64729,10 @@ $as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} ...@@ -64735,7 +64729,10 @@ $as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
fi fi
fi fi
# Everything parsed; figure out what file to use. # For libtool versioning info, format is CURRENT:REVISION:AGE
libtool_VERSION=6:17:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in case $enable_symvers in
no) no)
SYMVER_FILE=config/abi/pre/none.ver SYMVER_FILE=config/abi/pre/none.ver
...@@ -64747,6 +64744,7 @@ $as_echo "#define _GLIBCXX_SYMVER_GNU 1" >>confdefs.h ...@@ -64747,6 +64744,7 @@ $as_echo "#define _GLIBCXX_SYMVER_GNU 1" >>confdefs.h
;; ;;
gnu-versioned-namespace) gnu-versioned-namespace)
libtool_VERSION=7:0:0
SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
$as_echo "#define _GLIBCXX_SYMVER_GNU_NAMESPACE 1" >>confdefs.h $as_echo "#define _GLIBCXX_SYMVER_GNU_NAMESPACE 1" >>confdefs.h
...@@ -64897,6 +64895,8 @@ fi ...@@ -64897,6 +64895,8 @@ fi
$as_echo "$glibcxx_ptrdiff_t_is_i" >&6; } $as_echo "$glibcxx_ptrdiff_t_is_i" >&6; }
# Check whether --enable-visibility was given. # Check whether --enable-visibility was given.
if test "${enable_visibility+set}" = set; then : if test "${enable_visibility+set}" = set; then :
enableval=$enable_visibility; enableval=$enable_visibility;
...@@ -11,10 +11,6 @@ AC_CONFIG_HEADER(config.h) ...@@ -11,10 +11,6 @@ AC_CONFIG_HEADER(config.h)
# exported. Only used at the end of this file. # exported. Only used at the end of this file.
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD ### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
# For libtool versioning info, format is CURRENT:REVISION:AGE
libtool_VERSION=6:17:0
AC_SUBST(libtool_VERSION)
# Find the rest of the source tree framework. # Find the rest of the source tree framework.
AM_ENABLE_MULTILIB(, ..) AM_ENABLE_MULTILIB(, ..)
...@@ -305,13 +301,13 @@ fi ...@@ -305,13 +301,13 @@ fi
# Check for _Unwind_GetIPInfo. # Check for _Unwind_GetIPInfo.
GCC_CHECK_UNWIND_GETIPINFO GCC_CHECK_UNWIND_GETIPINFO
GCC_LINUX_FUTEX([AC_DEFINE(HAVE_LINUX_FUTEX, 1, [Define if futex syscall is available.])]) GCC_LINUX_FUTEX([AC_DEFINE(HAVE_LINUX_FUTEX, 1, [Define if futex syscall is available.])])
GCC_HEADER_STDINT(include/gstdint.h) GCC_HEADER_STDINT(include/gstdint.h)
# This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
GLIBCXX_ENABLE_SYMVERS([yes]) GLIBCXX_ENABLE_SYMVERS([yes])
AC_SUBST(libtool_VERSION)
GLIBCXX_ENABLE_VISIBILITY([yes]) GLIBCXX_ENABLE_VISIBILITY([yes])
ac_ldbl_compat=no ac_ldbl_compat=no
......
...@@ -176,41 +176,42 @@ namespace std ...@@ -176,41 +176,42 @@ namespace std
// Defined if inline namespaces are used for versioning. // Defined if inline namespaces are used for versioning.
#define _GLIBCXX_INLINE_VERSION #define _GLIBCXX_INLINE_VERSION
// Inline namespace for symbol versioning. // Inline namespace for symbol versioning.
#if _GLIBCXX_INLINE_VERSION #if _GLIBCXX_INLINE_VERSION
namespace std namespace std
{ {
inline namespace _6 { } inline namespace __7 { }
namespace rel_ops { inline namespace _6 { } } namespace rel_ops { inline namespace __7 { } }
namespace tr1 namespace tr1
{ {
inline namespace _6 { } inline namespace __7 { }
namespace placeholders { inline namespace _6 { } } namespace placeholders { inline namespace __7 { } }
namespace regex_constants { inline namespace _6 { } } namespace regex_constants { inline namespace __7 { } }
namespace __detail { inline namespace _6 { } } namespace __detail { inline namespace __7 { } }
} }
namespace decimal { inline namespace _6 { } } namespace decimal { inline namespace __7 { } }
namespace chrono { inline namespace _6 { } } namespace chrono { inline namespace __7 { } }
namespace placeholders { inline namespace _6 { } } namespace placeholders { inline namespace __7 { } }
namespace regex_constants { inline namespace _6 { } } namespace regex_constants { inline namespace __7 { } }
namespace this_thread { inline namespace _6 { } } namespace this_thread { inline namespace __7 { } }
namespace __detail { inline namespace _6 { } } namespace __detail { inline namespace __7 { } }
namespace __regex { inline namespace _6 { } } namespace __regex { inline namespace __7 { } }
} }
namespace __gnu_cxx namespace __gnu_cxx
{ {
inline namespace _6 { } inline namespace __7 { }
namespace __detail { inline namespace _6 { } } namespace __detail { inline namespace __7 { } }
} }
# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace _6 { # define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __7 {
# define _GLIBCXX_END_NAMESPACE_VERSION } # define _GLIBCXX_END_NAMESPACE_VERSION }
#else #else
# define _GLIBCXX_BEGIN_NAMESPACE_VERSION # define _GLIBCXX_BEGIN_NAMESPACE_VERSION
...@@ -227,7 +228,7 @@ namespace std ...@@ -227,7 +228,7 @@ namespace std
namespace __cxx1998 namespace __cxx1998
{ {
#if _GLIBCXX_INLINE_VERSION #if _GLIBCXX_INLINE_VERSION
inline namespace _6 { } inline namespace __7 { }
#endif #endif
} }
......
...@@ -136,6 +136,8 @@ namespace std ...@@ -136,6 +136,8 @@ namespace std
namespace std _GLIBCXX_VISIBILITY(default) namespace std _GLIBCXX_VISIBILITY(default)
{ {
_GLIBCXX_BEGIN_NAMESPACE_VERSION
using ::wint_t; using ::wint_t;
using ::btowc; using ::btowc;
...@@ -207,8 +209,6 @@ namespace std _GLIBCXX_VISIBILITY(default) ...@@ -207,8 +209,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
using ::wcsstr; using ::wcsstr;
using ::wmemchr; using ::wmemchr;
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifndef __CORRECT_ISO_CPP_WCHAR_H_PROTO #ifndef __CORRECT_ISO_CPP_WCHAR_H_PROTO
inline wchar_t* inline wchar_t*
wcschr(wchar_t* __p, wchar_t __c) wcschr(wchar_t* __p, wchar_t __c)
......
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// Copyright (C) 2011 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
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// 20.7.11 Function template bind
#include <functional>
int f(int i);
// Don't want placeholders to interfere with a possibly-versioned namespace.
int g()
{
std::bind(f, std::placeholders::_6);
}
...@@ -25,4 +25,4 @@ ...@@ -25,4 +25,4 @@
#include <vector> #include <vector>
// { dg-error "multiple inlined namespaces" "" { target *-*-* } 255 } // { dg-error "multiple inlined namespaces" "" { target *-*-* } 256 }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment