Skip to content
  • Duncan Sands's avatar
    Change packed struct layout so that field sizes · fc3c489b
    Duncan Sands authored
    are the same as in unpacked structs, only field
    positions differ.  This only matters for structs
    containing x86 long double or an apint; it may
    cause backwards compatibility problems if someone
    has bitcode containing a packed struct with a
    field of one of those types.
    The issue is that only 10 bytes are needed to
    hold an x86 long double: the store size is 10
    bytes, but the ABI size is 12 or 16 bytes (linux/
    darwin) which comes from rounding the store size
    up by the alignment.  Because it seemed silly not
    to pack an x86 long double into 10 bytes in a
    packed struct, this is what was done.  I now
    think this was a mistake.  Reserving the ABI size
    for an x86 long double field even in a packed
    struct makes things more uniform: the ABI size is
    now always used when reserving space for a type.
    This means that developers are less likely to
    make mistakes.  It also makes life easier for the
    CBE which otherwise could not represent all LLVM
    packed structs (PR2402).
    Front-end people might need to adjust the way
    they create LLVM structs - see following change
    to llvm-gcc.
    
    llvm-svn: 51928
    fc3c489b
Loading