[all-commits] [llvm/llvm-project] a9c918: [libc++] Use the using_if_exists attribute when pr...
Louis Dionne via All-commits
all-commits at lists.llvm.org
Fri Jun 4 06:55:53 PDT 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: a9c9183ca42629fa83cdda297d1d30c7bc1d7c91
https://github.com/llvm/llvm-project/commit/a9c9183ca42629fa83cdda297d1d30c7bc1d7c91
Author: Louis Dionne <ldionne.2 at gmail.com>
Date: 2021-06-04 (Fri, 04 Jun 2021)
Changed paths:
M libcxx/include/__config
M libcxx/include/cctype
M libcxx/include/cfenv
M libcxx/include/cinttypes
M libcxx/include/clocale
M libcxx/include/cmath
M libcxx/include/csetjmp
M libcxx/include/csignal
M libcxx/include/cstdarg
M libcxx/include/cstddef
M libcxx/include/cstdint
M libcxx/include/cstdio
M libcxx/include/cstdlib
M libcxx/include/cstring
M libcxx/include/ctime
M libcxx/include/cwchar
M libcxx/include/cwctype
Log Message:
-----------
[libc++] Use the using_if_exists attribute when provided
As discussed on cfe-dev [1], use the using_if_exists Clang attribute when
the compiler supports it. This makes it easier to port libc++ on top of
new platforms that don't fully support the C Standard library.
Previously, libc++ would fail to build when trying to import a missing
declaration in a <cXXXX> header. With the attribute, the declaration will
simply not be imported into namespace std, and hence it won't be available
for libc++ to use. In many cases, the declarations were *not* actually
required for libc++ to work (they were only surfaced for users to use
them as std::XXXX), so not importing them into namespace std is acceptable.
The same thing could be achieved by conscious usage of `#ifdef` along
with platform detection, however that quickly creates a maintenance
problem as libc++ is ported to new platforms. Furthermore, this problem
is exacerbated when mixed with vendor internal-only platforms, which can
lead to difficulties maintaining a downstream fork of the library.
For the time being, we only use the using_if_exists attribute when it
is supported. At some point in the future, we will start removing #ifdef
paths that are unnecessary when the attribute is supported, and folks
who need those #ifdef paths will be required to use a compiler that
supports the attribute.
[1]: http://lists.llvm.org/pipermail/cfe-dev/2020-June/066038.html
Differential Revision: https://reviews.llvm.org/D90257
More information about the All-commits
mailing list