[patch] libstdc++/66017 Avoid bad casts and fix alignment of _Rb_tree_node<long long>::_M_storage

Jonathan Wakely jwakely@redhat.com
Fri May 22 15:21:00 GMT 2015


On 22/05/15 17:13 +0200, Jakub Jelinek wrote:
>On Fri, May 22, 2015 at 03:59:47PM +0100, Jonathan Wakely wrote:
>> >>+      alignas(alignof(_Tp2)) unsigned char _M_storage[sizeof(_Tp)];
>> >
>> >Is alignof(_Tp2) always the same as alignof(_Tp2::_M_t) on all targets
>> >(I mean, won't some target align the structure more than its only field)?
>>
>> Hmm, maybe. I don't know.
>>
>> >Wouldn't it be safer to use alignof(_Tp2::_M_t) here?
>>
>> Yes.
>>
>> >Though, apparently that is a GNU extension, so you'd need to use __alignof__
>> >instead.
>>
>> Yes, that's what I did in an earlier version of the patch, so I'll go
>> back to that.
>
>Just grepped around, and e.g. on powerpc64le-linux -std=c++11 -malign-power -O2
>typedef double _Tp;
>struct _Tp2 { _Tp _M_t; };
>extern _Tp2 tp2e;
>int a = alignof(_Tp2);
>int b = __alignof__(_Tp2::_M_t);
>int c = alignof(_Tp);
>int d = __alignof__(tp2e._M_t);
>int e = alignof(_Tp2::_M_t);
>
>we have a = 8, b = 4, c = 8, d = 4, e = 4.

OK, thanks.

>Note clang++ with -pedantic-errors errors out on alignof(_Tp2::_M_t) though.

It allows __alignof__ though.



More information about the Libstdc++ mailing list