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