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