xref: /llvm-project/clang/test/ASTMerge/struct/Inputs/struct1.c (revision 0333dd95636da52229ca14b4e5525c1cd8ba62d2)
1*0333dd95SReid Kleckner typedef int Int;
2*0333dd95SReid Kleckner typedef float Float;
3*0333dd95SReid Kleckner 
4*0333dd95SReid Kleckner // Matches
5*0333dd95SReid Kleckner struct S0 {
6*0333dd95SReid Kleckner   Int field1;
7*0333dd95SReid Kleckner   Float field2;
8*0333dd95SReid Kleckner };
9*0333dd95SReid Kleckner 
10*0333dd95SReid Kleckner struct S0 x0;
11*0333dd95SReid Kleckner 
12*0333dd95SReid Kleckner // Mismatch in field type
13*0333dd95SReid Kleckner struct S1 {
14*0333dd95SReid Kleckner   Int field1;
15*0333dd95SReid Kleckner   int field2;
16*0333dd95SReid Kleckner };
17*0333dd95SReid Kleckner 
18*0333dd95SReid Kleckner struct S1 x1;
19*0333dd95SReid Kleckner 
20*0333dd95SReid Kleckner // Mismatch in tag kind.
21*0333dd95SReid Kleckner struct S2 { int i; float f; } x2;
22*0333dd95SReid Kleckner 
23*0333dd95SReid Kleckner // Missing fields
24*0333dd95SReid Kleckner struct S3 { int i; float f; double d; } x3;
25*0333dd95SReid Kleckner 
26*0333dd95SReid Kleckner // Extra fields
27*0333dd95SReid Kleckner struct S4 { int i; } x4;
28*0333dd95SReid Kleckner 
29*0333dd95SReid Kleckner // Bit-field matches
30*0333dd95SReid Kleckner struct S5 { int i : 8; unsigned j : 8; } x5;
31*0333dd95SReid Kleckner 
32*0333dd95SReid Kleckner // Bit-field mismatch
33*0333dd95SReid Kleckner struct S6 { int i : 8; unsigned j : 8; } x6;
34*0333dd95SReid Kleckner 
35*0333dd95SReid Kleckner // Bit-field mismatch
36*0333dd95SReid Kleckner struct S7 { int i : 8; unsigned j : 8; } x7;
37*0333dd95SReid Kleckner 
38*0333dd95SReid Kleckner // Incomplete type
39*0333dd95SReid Kleckner struct S8 *x8;
40*0333dd95SReid Kleckner 
41*0333dd95SReid Kleckner // Incomplete type
42*0333dd95SReid Kleckner struct S9 { int i; float f; } *x9;
43*0333dd95SReid Kleckner 
44*0333dd95SReid Kleckner // Incomplete type
45*0333dd95SReid Kleckner struct S10 *x10;
46*0333dd95SReid Kleckner 
47*0333dd95SReid Kleckner // Matches
48*0333dd95SReid Kleckner struct ListNode {
49*0333dd95SReid Kleckner   int value;
50*0333dd95SReid Kleckner   struct ListNode *Next;
51*0333dd95SReid Kleckner } xList;
52*0333dd95SReid Kleckner 
53*0333dd95SReid Kleckner // Mismatch due to struct used internally
54*0333dd95SReid Kleckner struct DeepError {
55*0333dd95SReid Kleckner   int value;
56*0333dd95SReid Kleckner   struct DeeperError { int i; int f; } *Deeper;
57*0333dd95SReid Kleckner } xDeep;
58*0333dd95SReid Kleckner 
59*0333dd95SReid Kleckner // Matches
60*0333dd95SReid Kleckner struct {
61*0333dd95SReid Kleckner   Int i;
62*0333dd95SReid Kleckner   float f;
63*0333dd95SReid Kleckner } x11;
64*0333dd95SReid Kleckner 
65*0333dd95SReid Kleckner // Matches
66*0333dd95SReid Kleckner typedef struct {
67*0333dd95SReid Kleckner   Int i;
68*0333dd95SReid Kleckner   float f;
69*0333dd95SReid Kleckner } S12;
70*0333dd95SReid Kleckner 
71*0333dd95SReid Kleckner S12 x12;
72*0333dd95SReid Kleckner 
73*0333dd95SReid Kleckner // Mismatch
74*0333dd95SReid Kleckner typedef struct {
75*0333dd95SReid Kleckner   Float i; // Mismatch here.
76*0333dd95SReid Kleckner   float f;
77*0333dd95SReid Kleckner } S13;
78*0333dd95SReid Kleckner 
79*0333dd95SReid Kleckner S13 x13;
80*0333dd95SReid Kleckner 
81*0333dd95SReid Kleckner // Matches
82*0333dd95SReid Kleckner struct Unnamed {
83*0333dd95SReid Kleckner   union {
84*0333dd95SReid Kleckner     struct {
85*0333dd95SReid Kleckner       int i;
86*0333dd95SReid Kleckner     } S;
87*0333dd95SReid Kleckner     struct {
88*0333dd95SReid Kleckner       float i;
89*0333dd95SReid Kleckner     } R;
90*0333dd95SReid Kleckner   } U;
91*0333dd95SReid Kleckner } x14;
92*0333dd95SReid Kleckner 
93*0333dd95SReid Kleckner // Matches
94*0333dd95SReid Kleckner struct DeepUnnamed {
95*0333dd95SReid Kleckner   union {
96*0333dd95SReid Kleckner     union {
97*0333dd95SReid Kleckner       struct {
98*0333dd95SReid Kleckner         long i;
99*0333dd95SReid Kleckner       } S;
100*0333dd95SReid Kleckner       struct {
101*0333dd95SReid Kleckner         int i;
102*0333dd95SReid Kleckner       } R;
103*0333dd95SReid Kleckner     } U1;
104*0333dd95SReid Kleckner     union {
105*0333dd95SReid Kleckner       struct {
106*0333dd95SReid Kleckner         long i;
107*0333dd95SReid Kleckner       } S;
108*0333dd95SReid Kleckner       struct {
109*0333dd95SReid Kleckner         float i;
110*0333dd95SReid Kleckner       } T;
111*0333dd95SReid Kleckner     } U2;
112*0333dd95SReid Kleckner   } U;
113*0333dd95SReid Kleckner   struct {
114*0333dd95SReid Kleckner     long i;
115*0333dd95SReid Kleckner   } V;
116*0333dd95SReid Kleckner } x15;
117*0333dd95SReid Kleckner 
118*0333dd95SReid Kleckner // Mismatch due to unnamed struct used internally
119*0333dd95SReid Kleckner struct DeepUnnamedError {
120*0333dd95SReid Kleckner   union {
121*0333dd95SReid Kleckner     union {
122*0333dd95SReid Kleckner       struct {
123*0333dd95SReid Kleckner         long i;
124*0333dd95SReid Kleckner       } S;
125*0333dd95SReid Kleckner       struct {
126*0333dd95SReid Kleckner         int i;
127*0333dd95SReid Kleckner       } R;
128*0333dd95SReid Kleckner     } U1;
129*0333dd95SReid Kleckner     union {
130*0333dd95SReid Kleckner       struct {
131*0333dd95SReid Kleckner         long i; // Mismatch here.
132*0333dd95SReid Kleckner       } S;
133*0333dd95SReid Kleckner       struct {
134*0333dd95SReid Kleckner         float i;
135*0333dd95SReid Kleckner       } T;
136*0333dd95SReid Kleckner     } U2;
137*0333dd95SReid Kleckner   } U;
138*0333dd95SReid Kleckner   struct {
139*0333dd95SReid Kleckner     long i;
140*0333dd95SReid Kleckner   } V;
141*0333dd95SReid Kleckner } x16;
142