1 /* { dg-do compile } */
2 /* { dg-require-effective-target store_merge } */
3 /* { dg-options "-O2 -fdump-tree-store-merging" } */
4
5 extern void abort (void);
6
7 struct S1 {
8 unsigned int flag : 1;
9 unsigned int size : 31;
10 };
11
12 void foo1 (struct S1 *s, struct S1 *m)
13 {
14 s->flag = 1;
15 s->size = m->size;
16 }
17
18 void bar1 (struct S1 *s, struct S1 *m, _Bool flag)
19 {
20 s->flag = flag;
21 s->size = m->size;
22 }
23
24 struct S2 {
25 unsigned int size : 31;
26 unsigned int flag : 1;
27 };
28
29 void foo2 (struct S2 *s, struct S2 *m)
30 {
31 s->size = m->size;
32 s->flag = 1;
33 }
34
35 void bar2 (struct S2 *s, struct S2 *m, _Bool flag)
36 {
37 s->flag = flag;
38 s->size = m->size;
39 }
40
41 /* { dg-final { scan-tree-dump-times "Merging successful" 4 "store-merging" } } */