1 /* PR c/34146 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -fdump-tree-gimple" } */
4
5 struct A
6 {
7 int f1, f2, f3;
8 };
9
10 struct B
11 {
12 struct A g1, g2;
13 };
14
15 struct C
16 {
17 struct B h1, h2;
18 };
19
20 typedef union
21 {
22 struct C c;
23 char s[4];
24 long int a;
25 } T;
26
27 void test (T *);
28
29 void
foo(void)30 foo (void)
31 {
32 T t = (T) { { { { 0, 0, 0 }, { 0, 0, 0 } }, { { 0, 0, 0 }, { 0, 0, 0 } } } };
33 test (&t);
34 }
35
36 void
bar(void)37 bar (void)
38 {
39 T t = (T) { { { { 0, 0, 0 }, (struct A) { 0, 0, 0 } },
40 (struct B) { (struct A) { 0, 0, 0 }, { 0, 0, 0 } } } };
41 test (&t);
42 }
43
44 void
baz(void)45 baz (void)
46 {
47 T t = (T) { { { { 0, 0, 0 }, (struct A) { 1, 1, 1 } },
48 (struct B) { (struct A) { 0, 0, 0 }, { 1, 1, 1 } } } };
49 test (&t);
50 }
51
52 /* { dg-final { scan-tree-dump-not "t = D" "gimple"} } */
53 /* { dg-final { scan-tree-dump-not "t\.c\.h\[12\] = D" "gimple"} } */
54 /* { dg-final { scan-tree-dump-not "\.g\[12\] = D" "gimple"} } */
55