1 /* { dg-do compile } */
2 /* { dg-require-effective-target size32plus } */
3 /* { dg-options "-fstrict-volatile-bitfields -fdump-rtl-final" } */
5 /* With -fstrict-volatile-bitfields, the volatile accesses to bf2.b
6 and bf3.b must do unsigned int reads/writes. The non-volatile
7 accesses to bf1.b are not so constrained. */
13 } __attribute__((aligned(4))) bf1
;
15 extern volatile struct
19 } __attribute__((aligned(4))) bf2
;
23 volatile unsigned int b
: 1;
24 volatile unsigned int : 31;
25 } __attribute__((aligned(4))) bf3
;
30 bf2
.b
= 1; /* volatile read + volatile write */
31 bf3
.b
= 1; /* volatile read + volatile write */
34 extern unsigned int x1
, x2
, x3
;
39 x2
= bf2
.b
; /* volatile write */
40 x3
= bf3
.b
; /* volatile write */
43 /* There should be 6 volatile MEMs total, but scan-rtl-dump-times counts
44 the number of match variables and not the number of matches. Since
45 the parenthesized subexpression in the regexp introduces an extra match
46 variable, we need to give a count of 12 instead of 6 here. */
47 /* { dg-final { scan-rtl-dump-times "mem/v(/.)*:SI" 12 "final" } } */
48 /* { dg-final { cleanup-rtl-dump "final" } } */