[cfe-dev] default alignment?

Török Edwin edwintorok at gmail.com
Mon Jan 17 09:49:36 PST 2011


On 2011-01-17 19:38, Eric Niebler wrote:
> On 1/18/2011 12:20 AM, Chris Lattner wrote:
>> On Jan 17, 2011, at 1:28 AM, Eric Niebler wrote:
>>> In Sema::ActOnPragmaPack, I see this:
>>>
>>>  // FIXME: This should come from the target.
>>>  if (AlignmentVal == 0)
>>>    AlignmentVal = 8;
>>>
>>> So, what's the right fix? Should this be
>>> (Context.Target.getDoubleAlign() / Context.Target.getCharWidth())? (And
>>> why 8? Where does that come from?)
>>
>> Hi Eric,
>>
>> I'm not familiar with #pragma pack show, but the 8 here is in bits.  The right fix is probably to call Context.Target.getCharWidth().
> 
> Hi Chris,
> 
> That's just can't be right.

It is in bytes, see
http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html

> A default alignment of 1 byte would lead to
> alignment faults all over the place.

Actually an alignment of 1 byte means that none of your struct elements
are aligned, and that the compiler should emit byte-level reads
even for larger fields on architectures that don't support unaligned
accesses.

Best regards,
--Edwin



More information about the cfe-dev mailing list