https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86492
Bug ID: 86492
Summary: [8/9 Regression] store-merging wrong-code
Product: gcc
Version: 9.0
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: ---
union U
{
unsigned int r;
struct
{
unsigned int a:12;
unsigned int b:4;
unsigned int c:16;
} f;
};
__attribute__((noinline, noclone)) unsigned int
foo (unsigned int x)
{
union U r;
r.r = 0;
r.f.c = x;
r.f.b = 0xe;
return r.r;
}
int
main ()
{
volatile unsigned int x;
x = 0x72;
x = foo (x);
union U r;
r.r = x;
if (r.f.a != 0 || r.f.b != 0xe || r.f.c != 0x72)
__builtin_abort ();
return 0;
}
is miscompiled by store-merging at -O2.