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