https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70445
Bug ID: 70445 Summary: Incorrect C++ member alignment Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- [hjl@gnu-ivb-1 gcc]$ cat /tmp/a.ii typedef struct xxx { unsigned long long a1; unsigned long long a2; unsigned long long a3; unsigned long long a4; } xxx; typedef struct Foo { xxx foo; } Foo; extern xxx b; Foo y; void foo (void) { b = y.foo; } [hjl@gnu-ivb-1 gcc]$ ./xgcc -B./ -S -O2 -da /tmp/a.ii [hjl@gnu-ivb-1 gcc]$ cp /tmp/a.ii /tmp/c.i [hjl@gnu-ivb-1 gcc]$ ./xgcc -B./ -S -O2 -da /tmp/c.i [hjl@gnu-ivb-1 gcc]$ grep A128 c.i.213r.expand [hjl@gnu-ivb-1 gcc]$ grep A128 a.ii.213r.expand (mem/c:DI (reg/f:DI 96) [1 y.foo+16 S8 A128])) /tmp/a.ii:20 -1 ^^^^^ Where dos it come from? (mem/c:DI (reg/f:DI 96) [1 y.foo+16 S8 A128])) /tmp/a.ii:20 -1 [hjl@gnu-ivb-1 gcc]$