OSDN Git Service

PR rtl-optimization/52139
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / anon-struct-12.c
1 /* { dg-do run } */
2 /* { dg-options "-fplan9-extensions" } */
3
4 /* When using -fplan9-extensions, we support automatic conversion of
5    pointer types, and we support referring to a typedef name
6    directly.  */
7
8 extern void exit (int);
9 extern void abort (void);
10
11 struct A { char a; };
12
13 struct B {
14   char b;
15   struct A;
16   char c;
17 };
18
19 void
20 f1 (struct A *p)
21 {
22   p->a = 1;
23 }
24
25 void
26 test1 (void)
27 {
28   struct B b;
29   struct A *p;
30
31   b.b = 2;
32   b.c = 3;
33   f1 (&b);
34   if (b.a != 1)
35     abort ();
36   if (b.b != 2 || b.c != 3)
37     abort ();
38   p = &b;
39   if (p->a != 1)
40     abort ();
41 }
42
43 typedef struct { char d; } D;
44
45 struct E {
46   char b;
47   struct F { char f; };
48   char c;
49   union {
50     D;
51   };
52   char e;
53 };
54
55 void
56 f2 (struct F *p)
57 {
58   p->f = 6;
59 }
60
61 void
62 f3 (D *p)
63 {
64   p->d = 4;
65 }
66
67 void
68 f4 (D d)
69 {
70 }
71
72 void
73 test2 (void)
74 {
75   struct E e;
76   struct F *pf;
77   D *pd;
78   D d;
79
80   e.b = 2;
81   e.c = 3;
82   e.e = 5;
83   f2 (&e);
84   f3 (&e);
85   if (e.d != 4)
86     abort ();
87   if (e.f != 6)
88     abort ();
89   if (e.b != 2 || e.c != 3 || e.e != 5)
90     abort ();
91   pf = &e;
92   if (pf->f != 6)
93     abort ();
94   pd = &e;
95   if (pd->d != 4)
96     abort ();
97   d = e.D;
98   f3 (&e.D);
99   f4 (e.D);
100 }
101
102 int
103 main ()
104 {
105   test1 ();
106   test2 ();
107   exit (0);
108 }