[libcxx] By default, do not use internal_linkage to hide symbols from the ABI
authorLouis Dionne <ldionne@apple.com>
Thu, 16 Aug 2018 12:44:28 +0000 (12:44 +0000)
committerLouis Dionne <ldionne@apple.com>
Thu, 16 Aug 2018 12:44:28 +0000 (12:44 +0000)
commit61cd68700927f4811e0803a135104e9c96b0d679
treebb0c53ea5239ffbf6307f3efd59c563563e9da01
parentd2f90ea3375a401f971400b93004ad7773dc56b4
[libcxx] By default, do not use internal_linkage to hide symbols from the ABI

Summary:
https://reviews.llvm.org/D49240 led to symbol size problems in Chromium, and
we expect this may be the case in other projects built in debug mode too.
Instead, unless users explicitly ask for internal_linkage, we use always_inline
like we used to.

In the future, when we have a solution that allows us to drop always_inline
without falling back on internal_linkage, we can replace always_inline by
that.

Note that this commit introduces a change in contract for existing libc++
users: by default, libc++ used to guarantee that TUs built with different
versions of libc++ could be linked together. With the introduction of the
_LIBCPP_HIDE_FROM_ABI_PER_TU macro, the default behavior is that TUs built
with different libc++ versions are not guaranteed to link. This is a change
in contract but not a change in behavior, since the current implementation
still allows linking TUs built with different libc++ versions together.

Reviewers: EricWF, mclow.lists, dexonsmith, hans, rnk

Subscribers: christof, cfe-commits

Differential Revision: https://reviews.llvm.org/D50652

llvm-svn: 339874
libcxx/CMakeLists.txt
libcxx/docs/BuildingLibcxx.rst
libcxx/docs/DesignDocs/VisibilityMacros.rst
libcxx/include/__config
libcxx/include/__config_site.in
libcxx/utils/libcxx/test/config.py