[libcxx-commits] [libcxx] 0cc34ca - [libc++] Define legacy symbols for inline functions at a finer-grained level
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Apr 12 10:44:37 PDT 2022
Author: Louis Dionne
Date: 2022-04-12T13:44:30-04:00
New Revision: 0cc34ca7ecfc9d0efee322f60ed6c3169f4f70ca
URL: https://github.com/llvm/llvm-project/commit/0cc34ca7ecfc9d0efee322f60ed6c3169f4f70ca
DIFF: https://github.com/llvm/llvm-project/commit/0cc34ca7ecfc9d0efee322f60ed6c3169f4f70ca.diff
LOG: [libc++] Define legacy symbols for inline functions at a finer-grained level
When we build the library with the stable ABI, we need to include some
functions in the dylib that were made inline in later versions of the
library (to avoid breaking code that might be relying on those symbols).
However, those methods were made non-inline whenever we'd be building
the library, which means that all translation units would end up using
the old out-of-line definition of these methods, as opposed to the new
inlined version. This patch makes it so that only the translation units
that actually define the out-of-line methods use the old definition,
opening up potential optimization opportunities in other translation
units.
This should solve some of the issues encountered in D65667.
Differential Revision: https://reviews.llvm.org/D123519
Added:
Modified:
libcxx/include/__memory/shared_ptr.h
libcxx/include/system_error
libcxx/src/memory.cpp
libcxx/src/system_error.cpp
Removed:
################################################################################
diff --git a/libcxx/include/__memory/shared_ptr.h b/libcxx/include/__memory/shared_ptr.h
index eb52f6ecbee7d..c1f6248523197 100644
--- a/libcxx/include/__memory/shared_ptr.h
+++ b/libcxx/include/__memory/shared_ptr.h
@@ -162,8 +162,7 @@ class _LIBCPP_TYPE_VIS __shared_count
explicit __shared_count(long __refs = 0) _NOEXCEPT
: __shared_owners_(__refs) {}
-#if defined(_LIBCPP_BUILDING_LIBRARY) && \
- defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
+#if defined(_LIBCPP_SHARED_PTR_DEFINE_LEGACY_INLINE_FUNCTIONS)
void __add_shared() noexcept;
bool __release_shared() noexcept;
#else
@@ -200,8 +199,7 @@ class _LIBCPP_TYPE_VIS __shared_weak_count
virtual ~__shared_weak_count();
public:
-#if defined(_LIBCPP_BUILDING_LIBRARY) && \
- defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
+#if defined(_LIBCPP_SHARED_PTR_DEFINE_LEGACY_INLINE_FUNCTIONS)
void __add_shared() noexcept;
void __add_weak() noexcept;
void __release_shared() noexcept;
diff --git a/libcxx/include/system_error b/libcxx/include/system_error
index 27e44beffe3c1..d8ab54ceaedfc 100644
--- a/libcxx/include/system_error
+++ b/libcxx/include/system_error
@@ -202,8 +202,7 @@ class _LIBCPP_TYPE_VIS error_category
public:
virtual ~error_category() _NOEXCEPT;
-#if defined(_LIBCPP_BUILDING_LIBRARY) && \
- defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
+#if defined(_LIBCPP_ERROR_CATEGORY_DEFINE_LEGACY_INLINE_FUNCTIONS)
error_category() noexcept;
#else
_LIBCPP_INLINE_VISIBILITY
diff --git a/libcxx/src/memory.cpp b/libcxx/src/memory.cpp
index 1b8c6b7e80fc3..5ee9cbff93e5c 100644
--- a/libcxx/src/memory.cpp
+++ b/libcxx/src/memory.cpp
@@ -6,6 +6,11 @@
//
//===----------------------------------------------------------------------===//
+#include <__config>
+#ifdef _LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS
+# define _LIBCPP_SHARED_PTR_DEFINE_LEGACY_INLINE_FUNCTIONS
+#endif
+
#include <memory>
#ifndef _LIBCPP_HAS_NO_THREADS
@@ -38,7 +43,7 @@ __shared_weak_count::~__shared_weak_count()
{
}
-#if defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
+#if defined(_LIBCPP_SHARED_PTR_DEFINE_LEGACY_INLINE_FUNCTIONS)
void
__shared_count::__add_shared() noexcept
{
@@ -75,7 +80,7 @@ __shared_weak_count::__release_shared() noexcept
__release_weak();
}
-#endif // _LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS
+#endif // _LIBCPP_SHARED_PTR_DEFINE_LEGACY_INLINE_FUNCTIONS
void
__shared_weak_count::__release_weak() noexcept
diff --git a/libcxx/src/system_error.cpp b/libcxx/src/system_error.cpp
index 66db76c37b5f6..ba5fa8f30b283 100644
--- a/libcxx/src/system_error.cpp
+++ b/libcxx/src/system_error.cpp
@@ -6,8 +6,12 @@
//
//===----------------------------------------------------------------------===//
-#include <__assert>
#include <__config>
+#ifdef _LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS
+# define _LIBCPP_ERROR_CATEGORY_DEFINE_LEGACY_INLINE_FUNCTIONS
+#endif
+
+#include <__assert>
#include <cerrno>
#include <cstdio>
#include <cstdlib>
@@ -26,7 +30,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
// class error_category
-#if defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
+#if defined(_LIBCPP_ERROR_CATEGORY_DEFINE_LEGACY_INLINE_FUNCTIONS)
error_category::error_category() noexcept
{
}
More information about the libcxx-commits
mailing list