Provide a constexpr addressof with GCC 7.
__builtin_addressof was added to the GCC trunk in the past week. This patch teaches libc++ about it so it can correctly provide constexpr addressof. Unfortunately this patch will break users of earlier GCC 7 builds, since we expect __builtin_addressof but one won't be provided. One option would be to only use __builtin_addressof for GCC 7.1 and above, but that means waiting for another release. Instead I've specifically chosen to break older GCC 7 versions. Since GCC 7 has yet to be released, and the 7.0 release is a development release, I believe that anybody currently using GCC 7.0 will have no issue upgrading. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@283715 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -425,7 +425,7 @@ template <bool _Bp, class _Tp = void> using enable_if_t = typename enable_if<_Bp
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// addressof
|
// addressof
|
||||||
#if __has_builtin(__builtin_addressof)
|
#if __has_builtin(__builtin_addressof) || _GNUC_VER >= 700
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
inline _LIBCPP_CONSTEXPR_AFTER_CXX14
|
inline _LIBCPP_CONSTEXPR_AFTER_CXX14
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ class Configuration(object):
|
|||||||
assert self.cxx.version is not None
|
assert self.cxx.version is not None
|
||||||
maj_v, min_v, _ = self.cxx.version
|
maj_v, min_v, _ = self.cxx.version
|
||||||
self.config.available_features.add(cxx_type)
|
self.config.available_features.add(cxx_type)
|
||||||
|
self.config.available_features.add('%s-%s' % (cxx_type, maj_v))
|
||||||
self.config.available_features.add('%s-%s.%s' % (
|
self.config.available_features.add('%s-%s.%s' % (
|
||||||
cxx_type, maj_v, min_v))
|
cxx_type, maj_v, min_v))
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
||||||
// XFAIL: gcc
|
// XFAIL: gcc-4, gcc-5, gcc-6
|
||||||
|
|
||||||
// <memory>
|
// <memory>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user