[Bug c/70166] New: Wrong optimization of type punning in unions with 2d array
ch3root at openwall dot com
gcc-bugzilla@gcc.gnu.org
Thu Mar 10 17:08:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70166
Bug ID: 70166
Summary: Wrong optimization of type punning in unions with 2d
array
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: ch3root at openwall dot com
Target Milestone: ---
Type-punning is underspecified in the C standard and unions with arrays as
members push it to the limit but the following example seems to be broken in
gcc unintentionally. It aborts while it shouldn't.
extern void abort (void);
int main()
{
union {
double d[1][1];
int a[1][1];
} u, *volatile p = &u;
**u.a = 1;
**p->d = 0;
if (**u.a != 0)
abort();
}
Alternatively, if this is intentional, perhaps the following sentence in [1]
could be clarified further:
"Even with -fstrict-aliasing, type-punning is allowed, provided the memory is
accessed through the union type."
[1] https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Type-punning
Tested with -O2 on gcc 4.7.2, 4.9.2 and 6.0.0 20160310.
More information about the Gcc-bugs
mailing list