This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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: [PATCH] Define libc_max_align_t


On Thu, Apr 02, 2015 at 09:36:56AM +0800, pinskia@gmail.com wrote:
> > On Apr 2, 2015, at 8:40 AM, Rich Felker <dalias@libc.org> wrote:
> > 
> >> On Thu, Apr 02, 2015 at 12:01:34AM +0200, Andreas Schwab wrote:
> >> Florian Weimer <fweimer@redhat.com> writes:
> >> 
> >>> +/* This mirrors the C11 max_align_t type provided by GCC, but it is
> >>> +   also available in C99 mode.  */
> >>> +typedef struct {
> >>> +  long long ll __attribute__ ((__aligned__ (__alignof__ (long long))));
> >>> +  long double ld __attribute__ ((__aligned__ (__alignof__ (long double))));
> >>> +} libc_max_align_t;
> >> 
> >> Why aren't the attributes no-ops?
> > 
> > Because gcc is insane.
> 
> No. Just some abi's are insane. 

I agree it was a bad ABI choice not to require alignment equal to size
for all types, but at least it's consistent. On the other hand gcc is
inconsistent here. The fact that Andreas had to ask why the above
attributes are not no-ops should be sufficient to establish that the
gcc behavior is inconsistent and confusing.

> > On gcc, __alignof__ returns the "preferred alignment for optimization"
> > that gcc would use allocating such objects individually, not the "ABI
> > alignment" that would be used in structs, etc.
> 
> Except some abis talk about different alignment for where the field is located. 

Someone can write meaningless text like that in the ABI, but it's not
ABI if it's not observable.

Rich


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