[libc++] Make __shared_weak_count vtable consistent across all build configurations
This patch ensures that __shared_weak_count provides a consistent vtable regardless of if RTTI is enabled or if we are targeting a static or shared libc++ build. This patch is technically ABI breaking, but only for a very specific configuration that no vendor should be shipping. Note that _LIBCPP_BUILD_STATIC is not normally defined when building libc++.a, but instead it must be manually provided by the user or the __config_site. Differential Revision: https://reviews.llvm.org/D32838
This commit is contained in:
parent
1b589f4d4d
commit
229db36474
|
@ -3271,13 +3271,7 @@ public:
|
|||
long use_count() const _NOEXCEPT {return __shared_count::use_count();}
|
||||
__shared_weak_count* lock() _NOEXCEPT;
|
||||
|
||||
// Define the function out only if we build static libc++ without RTTI.
|
||||
// Otherwise we may break clients who need to compile their projects with
|
||||
// -fno-rtti and yet link against a libc++.dylib compiled
|
||||
// without -fno-rtti.
|
||||
#if !defined(_LIBCPP_NO_RTTI) || !defined(_LIBCPP_BUILD_STATIC)
|
||||
virtual const void* __get_deleter(const type_info&) const _NOEXCEPT;
|
||||
#endif
|
||||
private:
|
||||
virtual void __on_zero_shared_weak() _NOEXCEPT = 0;
|
||||
};
|
||||
|
|
|
@ -124,16 +124,12 @@ __shared_weak_count::lock() _NOEXCEPT
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
#if !defined(_LIBCPP_NO_RTTI) || !defined(_LIBCPP_BUILD_STATIC)
|
||||
|
||||
const void*
|
||||
__shared_weak_count::__get_deleter(const type_info&) const _NOEXCEPT
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#endif // _LIBCPP_NO_RTTI
|
||||
|
||||
#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
|
||||
|
||||
_LIBCPP_SAFE_STATIC static const std::size_t __sp_mut_count = 16;
|
||||
|
|
|
@ -338,10 +338,6 @@ else()
|
|||
list(APPEND LIBCXXABI_COMPILE_FLAGS -DNDEBUG)
|
||||
endif()
|
||||
endif()
|
||||
# Static library
|
||||
if (NOT LIBCXXABI_ENABLE_SHARED)
|
||||
list(APPEND LIBCXXABI_COMPILE_FLAGS -D_LIBCPP_BUILD_STATIC)
|
||||
endif()
|
||||
|
||||
# Threading
|
||||
if (NOT LIBCXXABI_ENABLE_THREADS)
|
||||
|
|
Loading…
Reference in New Issue