Use default visibility to work around clang -fvisibility-inlines-hidden bug

Clang (including trunk and many older versions) incorrectly marks static
local variables (__tag) hidden when -fvisibility-inlines-hidden is used.
This can lead to multiple instances of __tag when shares objects are used.

2018-07-20  Fangrui Song  <maskray@google.com>

	* include/bits/shared_ptr_base.h (_Sp_make_shared_tag::_S_ti): Use
	_GLIBCXX_VISIBILITY(default).

From-SVN: r262903
This commit is contained in:
Fangrui Song 2018-07-20 11:24:55 +00:00 committed by Jonathan Wakely
parent afa07bdd78
commit 2143168e07
2 changed files with 6 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2018-07-20 Fangrui Song <maskray@google.com>
* include/bits/shared_ptr_base.h (_Sp_make_shared_tag::_S_ti): Use
_GLIBCXX_VISIBILITY(default).
2018-07-20 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/86603

View File

@ -508,7 +508,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
friend class _Sp_counted_ptr_inplace;
static const type_info&
_S_ti() noexcept
_S_ti() noexcept _GLIBCXX_VISIBILITY(default)
{
alignas(type_info) static constexpr _Sp_make_shared_tag __tag;
return reinterpret_cast<const type_info&>(__tag);