/* PR tree-optimization/84982 */ /* { dg-do run } */ /* { dg-options "-O2" } */ #ifndef __cplusplus #define bool _Bool #define true 1 #define false 0 #endif struct S { bool a, b, c, d; }; __attribute__((noipa)) void bar (bool *x) { if (x[0] || !x[1] || !x[2] || x[3]) __builtin_abort (); } __attribute__((noipa)) void foo (struct S *x) { bool a[4]; a[0] = !x->a; a[1] = !x->b; a[2] = x->c; a[3] = !x->d; bar (a); } int main () { struct S s; s.a = true; s.b = false; s.c = true; s.d = true; foo (&s); return 0; }