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