[libcxx-commits] [libcxx] 03dd205 - Adjust max_align_t handling

Louis Dionne via libcxx-commits libcxx-commits at lists.llvm.org
Tue Feb 25 08:43:57 PST 2020


Why did you commit this without a review? Did you know that one of the libc++ maintainers must give you approval for you to commit to libc++?

I reverted your commit in 7c2f4a83708 -- next time open a review on Phabricator. Also, you broke the C++03 CI with your commit: http://lab.llvm.org:8011/builders/libcxx-libcxxabi-x86_64-linux-ubuntu-cxx03/builds/3296

Louis

> On Feb 24, 2020, at 19:43, Joerg Sonnenberger via libcxx-commits <libcxx-commits at lists.llvm.org> wrote:
> 
> 
> Author: Joerg Sonnenberger
> Date: 2020-02-25T01:36:43+01:00
> New Revision: 03dd205c1516d9930a80101a7e0a6793af47ec9e
> 
> URL: https://github.com/llvm/llvm-project/commit/03dd205c1516d9930a80101a7e0a6793af47ec9e
> DIFF: https://github.com/llvm/llvm-project/commit/03dd205c1516d9930a80101a7e0a6793af47ec9e.diff
> 
> LOG: Adjust max_align_t handling
> 
> Depend on the compiler to provide a correct implementation of
> max_align_t. If __STDCPP_NEW_ALIGNMENT__ is missing and C++03 mode has
> been explicitly enabled, provide a minimal fallback in <new> as
> alignment of the largest primitive types.
> 
> Added: 
> 
> 
> Modified: 
>    libcxx/include/cstddef
>    libcxx/include/new
>    libcxx/include/stddef.h
> 
> Removed: 
> 
> 
> 
> ################################################################################
> diff  --git a/libcxx/include/cstddef b/libcxx/include/cstddef
> index 87eee4bf5b42..2a0bfeb6e15f 100644
> --- a/libcxx/include/cstddef
> +++ b/libcxx/include/cstddef
> @@ -25,7 +25,7 @@ Types:
> 
>     ptr
> diff _t
>     size_t
> -    max_align_t
> +    max_align_t // C++11
>     nullptr_t
>     byte // C++17
> 
> @@ -49,12 +49,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
> using ::ptr
> diff _t;
> using ::size_t;
> 
> -#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T) || \
> -    defined(__DEFINED_max_align_t) || defined(__NetBSD__)
> -// Re-use the compiler's <stddef.h> max_align_t where possible.
> +#if !defined(_LIBCPP_CXX03_LANG)
> using ::max_align_t;
> -#else
> -typedef long double max_align_t;
> #endif
> 
> template <class _Tp> struct __libcpp_is_integral                     { enum { value = 0 }; };
> 
> diff  --git a/libcxx/include/new b/libcxx/include/new
> index 40d351e9b770..b64057a87854 100644
> --- a/libcxx/include/new
> +++ b/libcxx/include/new
> @@ -226,9 +226,19 @@ inline _LIBCPP_INLINE_VISIBILITY void  operator delete[](void*, void*) _NOEXCEPT
> 
> _LIBCPP_BEGIN_NAMESPACE_STD
> 
> +#if defined(_LIBCPP_CXX03_LANG)
> +union __libcpp_max_align_t {
> +  void * __f1;
> +  long long int __f2;
> +  long double __f3;
> +};
> +#endif
> +
> _LIBCPP_CONSTEXPR inline _LIBCPP_INLINE_VISIBILITY bool __is_overaligned_for_new(size_t __align) _NOEXCEPT {
> #ifdef __STDCPP_DEFAULT_NEW_ALIGNMENT__
>   return __align > __STDCPP_DEFAULT_NEW_ALIGNMENT__;
> +#elif defined(_LIBCPP_CXX03_LANG)
> +  return __align > alignment_of<__libcpp_max_align_t>::value;
> #else
>   return __align > alignment_of<max_align_t>::value;
> #endif
> 
> diff  --git a/libcxx/include/stddef.h b/libcxx/include/stddef.h
> index 6497dcda2af4..ba28b29c0b3f 100644
> --- a/libcxx/include/stddef.h
> +++ b/libcxx/include/stddef.h
> @@ -51,12 +51,6 @@ extern "C++" {
> using std::nullptr_t;
> }
> 
> -// Re-use the compiler's <stddef.h> max_align_t where possible.
> -#if !defined(__CLANG_MAX_ALIGN_T_DEFINED) && !defined(_GCC_MAX_ALIGN_T) && \
> -    !defined(__DEFINED_max_align_t) && !defined(__NetBSD__)
> -typedef long double max_align_t;
> -#endif
> -
> #endif
> 
> #endif  // _LIBCPP_STDDEF_H
> 
> 
> 
> _______________________________________________
> libcxx-commits mailing list
> libcxx-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-commits



More information about the libcxx-commits mailing list