| /* { dg-do compile } */ |
| /* { dg-require-effective-target store_merge } */ |
| /* { dg-options "-O2 -fdump-tree-store-merging" } */ |
| |
| extern void abort (void); |
| |
| struct S1 { |
| unsigned int flag : 1; |
| unsigned int size : 31; |
| }; |
| |
| void foo1 (struct S1 *s, struct S1 *m) |
| { |
| s->flag = 1; |
| s->size = m->size; |
| } |
| |
| void bar1 (struct S1 *s, struct S1 *m, _Bool flag) |
| { |
| s->flag = flag; |
| s->size = m->size; |
| } |
| |
| struct S2 { |
| unsigned int size : 31; |
| unsigned int flag : 1; |
| }; |
| |
| void foo2 (struct S2 *s, struct S2 *m) |
| { |
| s->size = m->size; |
| s->flag = 1; |
| } |
| |
| void bar2 (struct S2 *s, struct S2 *m, _Bool flag) |
| { |
| s->flag = flag; |
| s->size = m->size; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "Merging successful" 4 "store-merging" } } */ |