Hello!
> I ran into this non-reproducible failure while testing a non-bootstrap build
> on x86_64:
>
> ...
> PASS: g++.dg/ubsan/align-2.C -Os (test for excess errors)
I found the same problem on x86_64 CentOS 5.10 when testing with -m32:
gcc unix/-m32:
FAIL: c-c++-common/ubsan/align-2.c -Os execution test
g++ unix/-m32:
FAIL: c-c++-common/ubsan/align-2.c -O2 execution test
FAIL: c-c++-common/ubsan/align-2.c -O3 -fomit-frame-pointer execution test
FAIL: c-c++-common/ubsan/align-2.c -O3 -g execution test
FAIL: c-c++-common/ubsan/align-2.c -O2 -flto -flto-partition=none
execution test
FAIL: c-c++-common/ubsan/align-2.c -O2 -flto execution test
FAIL: c-c++-common/ubsan/align-4.c -O1 execution test
The call to f4 in the following line triggers the failure:
if (f2 (&v.u.e) + f3 (&v.u.e, 4) + f4 (&v.u.f.b) != 0)
__builtin_abort ();
I find it interesting that adding a dummy char c; after long long b in:
struct T { char a; long long b; };
solves the problem for me.
However, running the executable under valgrind shows nothing interesting.
For reference:
$ /lib/libc.so.6
GNU C Library stable release version 2.5, by Roland McGrath et al.
Uros.