David Edelsohn wrote:
> 
> > To avoid having a partial ABI implementation in tree, it seems best
> > to commit this whole patch series as a single commit.
> 
> > Is the series OK for mainline?
> 
> The 8 patch series implementing and enabling ELFv2 is okay, including
> the implementation of command line switches.

Thanks for the review, David!

> There appear to be a few new regressions on AIX for
> compat/struct-layout that need to be analyzed and addressed.

I've looked into these a bit more.  I'm seeing new failures:
FAIL: tmpdir-g++.dg-struct-layout-1/t029 cp_compat_x_tst.o-cp_compat_y_tst.o 
execute
FAIL: tmpdir-g++.dg-struct-layout-1/t030 cp_compat_x_tst.o-cp_compat_y_tst.o 
execute

and looking into these, there are a total of 7 sub-tests that fail:
t029: test2852
t029: test2865
t030: test2915
t030: test2961
t030: test2962
t030: test2966
t030: test2984

Now, every single one of them fails not on any ABI test, but already
on the preliminary check that the structure is properly aligned:

in g++.dg/compat/struct-layout-1_x1.h:

void test##n (void)                                             \
{                                                               \
  int i, j;                                                     \
  memset (&s##n, '\0', sizeof (s##n));                          \
  memset (a##n, '\0', sizeof (a##n));                           \
  memset (&info, '\0', sizeof (info));                          \
  info.sp = &s##n;                                              \
  info.a0p = &a##n[0];                                          \
  info.a3p = &a##n[3];                                          \
  info.sz = sizeof (s##n);                                      \
  info.als = __alignof__ (s##n);                                \
  info.ala0 = __alignof__ (a##n[0]);                            \
  info.ala3 = __alignof__ (a##n[3]);                            \
  if (((long) (__SIZE_TYPE__) &a##n[3]) & (info.als - 1))                       
\
    FAIL (n, 1);                                                \

In all seven cases, info.als is 64, so for some reason the
structure is supposed to be 64-byte aligned, but the actual
location of the struct in memory does not respect that,
so the FAIL is invoked here.

Interestingly, I've seen the same test fail with the 4.6.0
baseline compiler installed on the system.  My assumption
would be that this is simply a pre-existing bug (either
the alignment is computed incorrectly, or it is not being
respected properly throughout the toolchain), and you were
seeing successful runs in the past simply because the structs
just happened to end up at aligned addresses ...

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU/Linux compilers and toolchain
  ulrich.weig...@de.ibm.com

Reply via email to