This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [libstdc++/65033] Give alignment info to libatomic


On 04/03/2015 07:13 AM, Jonathan Wakely wrote:
> +++ b/libstdc++-v3/include/std/atomic
> @@ -165,9 +165,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>      struct atomic
>      {
>      private:
> -      // Align 1/2/4/8/16-byte types the same as integer types of that size.
> +      // Align 1/2/4/8/16-byte types the natural alignment of that size.
>        // This matches the alignment effects of the C11 _Atomic qualifier.
> -      static constexpr int _S_min_alignment
> +      static constexpr int _S_int_alignment
>  	= sizeof(_Tp) == sizeof(char)	   ? alignof(char)
>  	: sizeof(_Tp) == sizeof(short)	   ? alignof(short)
>  	: sizeof(_Tp) == sizeof(int)	   ? alignof(int)
> @@ -178,6 +178,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>  #endif
>  	: 0;
>  
> +      static constexpr int _S_min_alignment
> +	= _S_int_alignment > sizeof(_Tp) ? _S_int_alignment : sizeof(_Tp);
> +

This doesn't work for non-power-of-two sized _Tp.

Again, we don't have *any* target for which alignof(integer) > sizeof(integer).
So if you care about forcing natural alignment, don't bother with the alignof
on the integrals, as you're doing with _S_int_alignment at the moment.


r~


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]