https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125739
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Reduced testcase, we get x.aa == 1, but I don't understand how we should not
...
-O3 -fno-tree-dse -fno-tree-pre -fno-expensive-optimizations -fno-tree-sra
-fno-tree-loop-vectorize
typedef struct {
float a;
float aa;
} d;
int e[256], m, n;
void __attribute__((noipa)) f(int g, int h) {
if (g != h)
__builtin_abort ();
}
static void o(char p, char q, char r, short s, char t, short u, short v) {
char w, *ag = &w;
d x;
int y = 1;
long z = 1;
x.a = x.aa = 1.0f;
m = 3 - 1073741824 - 3;
*ag = z = z - 2 * m;
z = -186621953 ^ (z + 4);
if (s)
ac:
if (-16385 == y)
x.aa = *ag = 0;
if (s)
y = y - 8193;
m = 2 - 350224399;
if (w)
goto ad;
goto ae;
ad:
x.a = 0 + x.a;
x.aa = 0 + x.aa;
goto ac;
ae:
f(1, x.a);
f(0, x.aa);
}
int main() {
o(7, 2, 4, -1, -17, 16384, 1);
return 0;
}