On Wed, May 22, 2013 at 07:57:34AM -0600, Sandra Loosemore wrote:
> On 05/22/2013 02:01 AM, Richard Biener wrote:
> >Maybe the idea was to increase the alignment of the struct (without
> >affecting it's layout) when that increases the alignment of a contained
> >array member.  Like for
> >
> >struct { int i; int j; float a[1024]; int x; };
> >
> >where aligning to sizeof (int) * 2 would get 'a' a bigger alignment.
> 
> In fact, this is what the patch I posted earlier this week does,
> except the alignment it looks for is 16 bytes.  In other words, it
> doesn't change the alignment of arrays inside structs (which would
> cause all sorts of compatibility problems), but it checks to see
> whether there is already some array inside the struct aligned on a
> 16-byte offset so that the whole containing struct object would
> benefit from being aligned on a 16-byte boundary.

Right, and I like the patch.  However it does have a potential ABI
problem.  For example a shared library that exports a variable
affected by this change might do so on a smaller alignment than new
code expects.  Fiddling with that variable in a new executable might
give wrong results.  Or the PR56564 case of linking C++ relocatable
objects compiled with different compilers might bite us.

Note that rs6000.h DATA_ALIGNMENT already assumes alignment greater
than the ppc64 ABI guarantees for byte arrays.  So we're already
guilty of this sin.

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to