https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
--- Comment #9 from Richard Biener ---
Author: rguenth
Date: Wed Nov 28 13:51:42 2018
New Revision: 266560
URL: https://gcc.gnu.org/viewcvs?rev=266560&root=gcc&view=rev
Log:
2018-11-28 Richard Biener
PR tree-optimization/88223
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
--- Comment #8 from Richard Biener ---
The C standard is unclear here (C18, 6.2.6.1/7).
union { struct X { int i; int j; } x; struct Y { int i; int j; } y; } u;
u.x.i = 1;
u.y.j = 1;
after the second store does u.y.i have unspecified value? Be
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
Richard Biener changed:
What|Removed |Added
CC||jsm28 at gcc dot gnu.org
--- Comment #7
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
--- Comment #6 from Richard Biener ---
Hmm, and with unions we can break the TBAA rule.
union U {
struct X { int a : 3; int b : 8; } a;
struct Y { int a : 4; int b : 8; } b;
};
union U u;
int __attribute__((noinline)) bar ()
{
int x = u.a
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
--- Comment #5 from Richard Biener ---
OK, so the bug is in
/* If we reach a clobbering statement try to skip it and see if
we find a VN result with exactly the same value as the
possible clobber. In this case we can ign
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
--- Comment #4 from Richard Biener ---
extern void *memmove(void *, const void *, __SIZE_TYPE__);
extern void abort(void);
extern int
main(void)
{
char s[] = "12345";
memmove(s + 1, s, 4);
memmove(s + 1, s, 4);
memmove(s + 1, s, 4);
if (s[0
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
Richard Biener changed:
What|Removed |Added
Priority|P3 |P2
Status|UNCONFIRMED
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88223
Alexander Monakov changed:
What|Removed |Added
Keywords||wrong-code
CC|