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>
Revert (no longer necessary post r179130):
......
......@@ -3054,10 +3054,15 @@ dnl
dnl Add version tags to symbols in shared library (or not), additionally
dnl marking other symbols as private/local (or not).
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 creating the shared library. The choice of version script is
dnl controlled by 'style'.
dnl --disable-symvers does not.
dnl
dnl + Usage: GLIBCXX_ENABLE_SYMVERS[(DEFAULT)]
dnl Where DEFAULT is either 'yes' or 'no'. Passing `yes' tries to
dnl choose a default style based on linker characteristics. Passing
......@@ -3194,7 +3199,10 @@ changequote([,])dnl
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
no)
SYMVER_FILE=config/abi/pre/none.ver
......@@ -3205,6 +3213,7 @@ case $enable_symvers in
[Define to use GNU versioning in the shared library.])
;;
gnu-versioned-namespace)
libtool_VERSION=7:0:0
SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
AC_DEFINE(_GLIBCXX_SYMVER_GNU_NAMESPACE, 1,
[Define to use GNU namespace versioning in the shared library.])
......
......@@ -20,23 +20,23 @@
## with this library; see the file COPYING3. If not see
## <http://www.gnu.org/licenses/>.
GLIBCXX_5.0 {
GLIBCXX_7.0 {
global:
# Names inside the 'extern' block are demangled names.
extern "C++"
{
std::_6::*;
std::__7::*;
std::*
};
# locale
_ZNSt2_69has_facetINS_*;
_ZNSt3__79has_facetINS_*;
# hash
_ZNSt8__detail2_612__prime_listE;
_ZNSt3tr18__detail2_612__prime_listE;
_ZNSt8__detail3__712__prime_listE;
_ZNSt3tr18__detail3__712__prime_listE;
# thread/mutex/condition_variable/future
__once_proxy;
......@@ -73,41 +73,41 @@ GLIBCXX_5.0 {
_ZTv0_n*;
# std::__detail::_List_node_base
_ZNSt8__detail2_615_List_node_base7_M_hook*;
_ZNSt8__detail2_615_List_node_base9_M_unhookEv;
_ZNSt8__detail2_615_List_node_base10_M_reverseEv;
_ZNSt8__detail2_615_List_node_base11_M_transfer*;
_ZNSt8__detail2_615_List_node_base4swapER*;
_ZNSt8__detail3__715_List_node_base7_M_hook*;
_ZNSt8__detail3__715_List_node_base9_M_unhookEv;
_ZNSt8__detail3__715_List_node_base10_M_reverseEv;
_ZNSt8__detail3__715_List_node_base11_M_transfer*;
_ZNSt8__detail3__715_List_node_base4swapER*;
# std::__convert_to_v
_ZNSt2_614__convert_to_v*;
_ZNSt3__714__convert_to_v*;
# std::__copy_streambufs
_ZNSt2_617__copy_streambufsI*;
_ZNSt2_621__copy_streambufs_eofI*;
_ZNSt3__717__copy_streambufsI*;
_ZNSt3__721__copy_streambufs_eofI*;
# __gnu_cxx::__atomic_add
# __gnu_cxx::__exchange_and_add
_ZN9__gnu_cxx2_612__atomic_addEPV[il][il];
_ZN9__gnu_cxx2_618__exchange_and_addEPV[li][il];
_ZN9__gnu_cxx3__712__atomic_addEPV[il][il];
_ZN9__gnu_cxx3__718__exchange_and_addEPV[li][il];
# __gnu_cxx::__pool
_ZN9__gnu_cxx2_66__poolILb[01]EE13_M_initializeEv;
_ZN9__gnu_cxx2_66__poolILb[01]EE16_M_reserve_blockE[jm][jm];
_ZN9__gnu_cxx2_66__poolILb[01]EE16_M_reclaim_blockEPc[jm];
_ZN9__gnu_cxx2_66__poolILb[01]EE10_M_destroyEv;
_ZN9__gnu_cxx2_66__poolILb1EE16_M_get_thread_idEv;
_ZN9__gnu_cxx3__76__poolILb[01]EE13_M_initializeEv;
_ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reserve_blockE[jm][jm];
_ZN9__gnu_cxx3__76__poolILb[01]EE16_M_reclaim_blockEPc[jm];
_ZN9__gnu_cxx3__76__poolILb[01]EE10_M_destroyEv;
_ZN9__gnu_cxx3__76__poolILb1EE16_M_get_thread_idEv;
_ZN9__gnu_cxx2_617__pool_alloc_base9_M_refillE[jm];
_ZN9__gnu_cxx2_617__pool_alloc_base16_M_get_free_listE[jm];
_ZN9__gnu_cxx2_617__pool_alloc_base12_M_get_mutexEv;
_ZN9__gnu_cxx3__717__pool_alloc_base9_M_refillE[jm];
_ZN9__gnu_cxx3__717__pool_alloc_base16_M_get_free_listE[jm];
_ZN9__gnu_cxx3__717__pool_alloc_base12_M_get_mutexEv;
_ZN9__gnu_cxx2_69free_list6_M_getE[jm];
_ZN9__gnu_cxx2_69free_list8_M_clearEv;
_ZN9__gnu_cxx3__79free_list6_M_getE[jm];
_ZN9__gnu_cxx3__79free_list8_M_clearEv;
# __gnu_cxx::stdio_sync_filebuf
_ZTVN9__gnu_cxx2_618stdio_sync_filebufI[cw]St2_611char_traitsI[cw]EEE;
_ZN9__gnu_cxx2_618stdio_sync_filebufI[cw]NSt2_611char_traitsI[cw]EEE[5-9]*;
_ZTVN9__gnu_cxx3__718stdio_sync_filebufI[cw]St3__711char_traitsI[cw]EEE;
_ZN9__gnu_cxx3__718stdio_sync_filebufI[cw]NSt3__711char_traitsI[cw]EEE[5-9]*;
# debug mode
_ZN11__gnu_debug19_Safe_sequence_base12_M_get_mutexEv;
......@@ -212,7 +212,7 @@ CXXABI_2.0 {
_ZSt15_Fnv_hash_bytesPKv*;
# __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
_ZN10__cxxabiv117__array_type_info*;
......
......@@ -645,6 +645,7 @@ GLIBCXX_LDBL_COMPAT_FALSE
GLIBCXX_LDBL_COMPAT_TRUE
ENABLE_VISIBILITY_FALSE
ENABLE_VISIBILITY_TRUE
libtool_VERSION
ENABLE_SYMVERS_SOL2_FALSE
ENABLE_SYMVERS_SOL2_TRUE
ENABLE_SYMVERS_SUN_FALSE
......@@ -788,7 +789,6 @@ build_vendor
build_cpu
build
multi_basedir
libtool_VERSION
target_alias
host_alias
build_alias
......@@ -2825,10 +2825,6 @@ ac_config_headers="$ac_config_headers config.h"
# exported. Only used at the end of this file.
### 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.
# Default to --enable-multilib
# Check whether --enable-multilib was given.
......@@ -11489,7 +11485,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 11492 "configure"
#line 11488 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
......@@ -11595,7 +11591,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 11598 "configure"
#line 11594 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
......@@ -14953,7 +14949,7 @@ fi
#
# Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF
#line 14956 "configure"
#line 14952 "configure"
struct S { ~S(); };
void bar();
void foo()
......@@ -15321,7 +15317,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
#line 15324 "configure"
#line 15320 "configure"
int main()
{
typedef bool atomic_type;
......@@ -15358,7 +15354,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
#line 15361 "configure"
#line 15357 "configure"
int main()
{
typedef short atomic_type;
......@@ -15395,7 +15391,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
#line 15398 "configure"
#line 15394 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
......@@ -15433,7 +15429,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
#line 15436 "configure"
#line 15432 "configure"
int main()
{
typedef long long atomic_type;
......@@ -15509,7 +15505,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
#line 15512 "configure"
#line 15508 "configure"
int main()
{
_Decimal32 d1;
......@@ -15551,7 +15547,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
#line 15554 "configure"
#line 15550 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
......@@ -15585,7 +15581,7 @@ $as_echo "$enable_int128" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
#line 15588 "configure"
#line 15584 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
......@@ -63971,7 +63967,6 @@ $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h
fi
# Check whether --enable-linux-futex was given.
if test "${enable_linux_futex+set}" = set; then :
enableval=$enable_linux_futex;
......@@ -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_n "checking for GNU c++filt... " >&6; }
......@@ -64735,7 +64729,10 @@ $as_echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;}
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
no)
SYMVER_FILE=config/abi/pre/none.ver
......@@ -64747,6 +64744,7 @@ $as_echo "#define _GLIBCXX_SYMVER_GNU 1" >>confdefs.h
;;
gnu-versioned-namespace)
libtool_VERSION=7:0:0
SYMVER_FILE=config/abi/pre/gnu-versioned-namespace.ver
$as_echo "#define _GLIBCXX_SYMVER_GNU_NAMESPACE 1" >>confdefs.h
......@@ -64897,6 +64895,8 @@ fi
$as_echo "$glibcxx_ptrdiff_t_is_i" >&6; }
# Check whether --enable-visibility was given.
if test "${enable_visibility+set}" = set; then :
enableval=$enable_visibility;
......@@ -11,10 +11,6 @@ AC_CONFIG_HEADER(config.h)
# exported. Only used at the end of this file.
### 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.
AM_ENABLE_MULTILIB(, ..)
......@@ -305,13 +301,13 @@ fi
# Check for _Unwind_GetIPInfo.
GCC_CHECK_UNWIND_GETIPINFO
GCC_LINUX_FUTEX([AC_DEFINE(HAVE_LINUX_FUTEX, 1, [Define if futex syscall is available.])])
GCC_HEADER_STDINT(include/gstdint.h)
# This depends on GLIBCXX CHECK_LINKER_FEATURES, but without it assumes no.
GLIBCXX_ENABLE_SYMVERS([yes])
AC_SUBST(libtool_VERSION)
GLIBCXX_ENABLE_VISIBILITY([yes])
ac_ldbl_compat=no
......
......@@ -176,41 +176,42 @@ namespace std
// Defined if inline namespaces are used for versioning.
#define _GLIBCXX_INLINE_VERSION
#define _GLIBCXX_INLINE_VERSION
// Inline namespace for symbol versioning.
#if _GLIBCXX_INLINE_VERSION
namespace std
{
inline namespace _6 { }
inline namespace __7 { }
namespace rel_ops { inline namespace _6 { } }
namespace rel_ops { inline namespace __7 { } }
namespace tr1
{
inline namespace _6 { }
namespace placeholders { inline namespace _6 { } }
namespace regex_constants { inline namespace _6 { } }
namespace __detail { inline namespace _6 { } }
inline namespace __7 { }
namespace placeholders { inline namespace __7 { } }
namespace regex_constants { inline namespace __7 { } }
namespace __detail { inline namespace __7 { } }
}
namespace decimal { inline namespace _6 { } }
namespace decimal { inline namespace __7 { } }
namespace chrono { inline namespace _6 { } }
namespace placeholders { inline namespace _6 { } }
namespace regex_constants { inline namespace _6 { } }
namespace this_thread { inline namespace _6 { } }
namespace chrono { inline namespace __7 { } }
namespace placeholders { inline namespace __7 { } }
namespace regex_constants { inline namespace __7 { } }
namespace this_thread { inline namespace __7 { } }
namespace __detail { inline namespace _6 { } }
namespace __regex { inline namespace _6 { } }
namespace __detail { inline namespace __7 { } }
namespace __regex { inline namespace __7 { } }
}
namespace __gnu_cxx
{
inline namespace _6 { }
namespace __detail { inline namespace _6 { } }
inline namespace __7 { }
namespace __detail { inline namespace __7 { } }
}
# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace _6 {
# define _GLIBCXX_BEGIN_NAMESPACE_VERSION namespace __7 {
# define _GLIBCXX_END_NAMESPACE_VERSION }
#else
# define _GLIBCXX_BEGIN_NAMESPACE_VERSION
......@@ -227,7 +228,7 @@ namespace std
namespace __cxx1998
{
#if _GLIBCXX_INLINE_VERSION
inline namespace _6 { }
inline namespace __7 { }
#endif
}
......
......@@ -136,6 +136,8 @@ namespace std
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
using ::wint_t;
using ::btowc;
......@@ -207,8 +209,6 @@ namespace std _GLIBCXX_VISIBILITY(default)
using ::wcsstr;
using ::wmemchr;
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifndef __CORRECT_ISO_CPP_WCHAR_H_PROTO
inline wchar_t*
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 @@
#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