/* This used to fail due to a ifcombine problem wrecking 64bit checks. Fixed with rev. 126876. */ /* { dg-do run } */ /* { dg-options "-O1" } */ struct tree_base { unsigned code:16; unsigned side_effects_flag:1; unsigned constant_flag:1; unsigned addressable_flag:1; unsigned volatile_flag:1; unsigned readonly_flag:1; unsigned unsigned_flag:1; unsigned asm_written_flag:1; unsigned nowarning_flag:1; unsigned used_flag:1; unsigned nothrow_flag:1; unsigned static_flag:1; unsigned public_flag:1; unsigned private_flag:1; unsigned protected_flag:1; unsigned deprecated_flag:1; unsigned invariant_flag:1; unsigned lang_flag_0:1; unsigned lang_flag_1:1; unsigned lang_flag_2:1; unsigned lang_flag_3:1; unsigned lang_flag_4:1; unsigned lang_flag_5:1; unsigned lang_flag_6:1; unsigned visited:1; unsigned spare1:16; unsigned spare2:8; unsigned long a; }; int foo (struct tree_base *rhs) { if (({const struct tree_base* __t = (rhs); __t;})->readonly_flag && (rhs)->static_flag) return 1; return 0; } extern void abort (void); int main () { struct tree_base t; t.readonly_flag = t.static_flag = 0; if (foo (&t)) abort (); return 0; }