https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93945
Bug ID: 93945
Summary: [9/10 Regression] memset of non-zero constant followed
by bitfield read big-endian miscompilation since
r9-547
Product: gcc
Version: 9.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
Target Milestone: ---
I think since r9-547-gb72feab889cd7925fab59771269638fcc88bc195 we miscompile
following testcase on big-endian (verified on powerpc64-linux) at -O2:
union U { char a[8]; struct S { unsigned int b : 8, c : 13, d : 11; } e; } u;
__attribute__((noipa)) int
foo (void)
{
__builtin_memset (&u.a, 0xf4, sizeof (u.a));
return u.e.c;
}
__attribute__((noipa)) int
bar (void)
{
asm volatile ("" : : "g" (&u) : "memory");
return u.e.c;
}
int
main ()
{
int a = foo ();
__builtin_memset (&u.a, 0xf4, sizeof (u.a));
int b = bar ();
if (a != b)
__builtin_abort ();
return 0;
}