| /* 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; | |
| } |