1411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// from SemaCXX/class-layout.cpp 2411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// RUN: c-index-test -test-print-type-size %s -target x86_64-pc-linux-gnu | FileCheck -check-prefix=CHECK64 %s 3411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// RUN: c-index-test -test-print-type-size %s -target i386-apple-darwin9 | FileCheck -check-prefix=CHECK32 %s 4411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 5411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace basic { 6411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 7411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: VarDecl=v:[[@LINE+2]]:6 (Definition) [type=void] [typekind=Void] 8411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: VarDecl=v:[[@LINE+1]]:6 (Definition) [type=void] [typekind=Void] 9411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisvoid v; 10411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 11411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: VarDecl=v1:[[@LINE+2]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=8] [alignof=8] 12411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: VarDecl=v1:[[@LINE+1]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=4] [alignof=4] 13411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisvoid *v1; 14411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 15411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// offsetof 16411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=simple:[[@LINE+2]]:8 (Definition) [type=basic::simple] [typekind=Record] [sizeof=48] [alignof=8] 17411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=simple:[[@LINE+1]]:8 (Definition) [type=basic::simple] [typekind=Record] [sizeof=36] [alignof=4] 18411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct simple { 19411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int a; 20411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char b; 21411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=c:[[@LINE+1]]:7 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=40] [BitFieldSize=3] 22411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int c:3; 23411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis long d; 24411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int e:5; 25411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=f:[[@LINE+1]]:7 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=133] [BitFieldSize=4] 26411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int f:4; 27411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=g:[[@LINE+2]]:13 (Definition) [type=long long] [typekind=LongLong] [sizeof=8] [alignof=8] [offsetof=192] 28411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=g:[[@LINE+1]]:13 (Definition) [type=long long] [typekind=LongLong] [sizeof=8] [alignof=4] [offsetof=128] 29411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis long long g; 30411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=h:[[@LINE+1]]:8 (Definition) [type=char] [typekind=Char_S] [sizeof=1] [alignof=1] [offsetof=256] [BitFieldSize=3] 31411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char h:3; 32411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char i:3; 33411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis float j; 34411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=k:[[@LINE+2]]:10 (Definition) [type=char *] [typekind=Pointer] [sizeof=8] [alignof=8] [offsetof=320] 35411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=k:[[@LINE+1]]:10 (Definition) [type=char *] [typekind=Pointer] [sizeof=4] [alignof=4] [offsetof=256] 36411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char * k; 37411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 38411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 39411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 40411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: UnionDecl=u:[[@LINE+2]]:7 (Definition) [type=basic::u] [typekind=Record] [sizeof=48] [alignof=8] 41411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: UnionDecl=u:[[@LINE+1]]:7 (Definition) [type=basic::u] [typekind=Record] [sizeof=36] [alignof=4] 42411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisunion u { 43411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int u1; 44411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis long long u2; 45411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct simple s1; 46411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 47411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 48411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: VarDecl=s1:[[@LINE+2]]:8 (Definition) [type=basic::simple] [typekind=Record] [sizeof=48] [alignof=8] 49411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: VarDecl=s1:[[@LINE+1]]:8 (Definition) [type=basic::simple] [typekind=Record] [sizeof=36] [alignof=4] 50411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidissimple s1; 51411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 52411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct Test { 53411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 54411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis union { 55411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis//CHECK64: FieldDecl=foo:[[@LINE+1]]:11 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=0] 56411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int foo; 57411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 58411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 59411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 60411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 61411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct Test2 { 62411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 63411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 64411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis//CHECK64: FieldDecl=foo:[[@LINE+1]]:11 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=0] 65411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int foo; 66411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 67411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 6833337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar//CHECK64: FieldDecl=bar:[[@LINE+1]]:11 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=32/0] 69411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int bar; 70411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 71411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 72411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 7333337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar//CHECK64: FieldDecl=foobar:[[@LINE+1]]:15 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=64/0] 74411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int foobar; 75411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 76411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 77411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 78411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 79411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 80411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 81411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 82411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// these are test crash. Offsetof return values are not important. 83411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace Incomplete { 84411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// test that fields in incomplete named record do not crash 85411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisunion named { 86411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl f1; 87411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int f2; 88411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct x { 89411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int g1; 90411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis } f3; 91411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl f4; 92411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct x2{ 93411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int g2; 94411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl g3; 95411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis } f5; 96411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 97411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 98411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// test that fields in incomplete anonymous record do not crash 99411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisunion f { 100411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl f1; 101411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int f2; 102411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 103411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int e1; 104411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 105411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 g1; 106411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 107411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int e3; 108411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 109411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 110411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 111411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 112411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// incomplete not in root level, in named record 113411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct s1 { 114411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 115411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 s1_g1; 116411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s1_e1; 117411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis } s1_x; // named record shows in s1->field_iterator 118411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s1_e3; 119411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 120411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 121411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// incomplete not in root level, in anonymous record 122411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct s1b { 123411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 124411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 s1b_g1; 125411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; // erroneous anonymous record does not show in s1b->field_iterator 126411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s1b_e2; 127411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 128411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 129411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct s2 { 130411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 131411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 s2_g1; 132411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s2_e1; 133411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; // erroneous anonymous record does not show in s1b->field_iterator 134411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s2_e3; 135411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 136411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 137411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis//deep anonymous with deep level incomplete 138411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct s3 { 139411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 140411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s3_e1; 141411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 142411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 143411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 144411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 145411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 s3_g1; 146411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 147411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 148411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 149411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 150411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s3_e3; 151411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 152411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 153411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 154411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis//deep anonymous with first level incomplete 155411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct s4a { 156411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 g1; 157411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 158411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 g2; 159411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 160411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 161411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 162411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 16333337ca4d89605025818daf83390ab4271d598d9Pirama Arumuga Nainar//CHECK64: FieldDecl=s4_e1:[[@LINE+1]]:17 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=-1/0] 164411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s4_e1; 165411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 166411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 167411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 168411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 169411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s4_e3; 170411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 171411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 172411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 173411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis//deep anonymous with sub-first-level incomplete 174411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct s4b { 175411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 176411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct forward_decl2 g1; 177411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 178411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 179411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 180411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct { 181411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s4b_e1; 182411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 183411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 184411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 185411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 186411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int s4b_e3; 187411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 188411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 189411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 1901a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay//named struct within anonymous struct 1911a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gaystruct s5 { 1921a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay struct { 1931a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay struct x { 1941a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay int i; 1951a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay }; 1961a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay }; 1971a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay}; 1981a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay 199411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=As:[[@LINE+1]]:8 [type=Incomplete::As] [typekind=Record] 200411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct As; 201411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 202411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// undefined class. Should not crash 203411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: ClassDecl=A:[[@LINE+1]]:7 [type=Incomplete::A] [typekind=Record] 204411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass A; 205411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass B { 206411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis A* a1; 207411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis A& a2; 208411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 209411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 210411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 211411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 212411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace Sizes { 213411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 214411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=A:[[@LINE+2]]:8 (Definition) [type=Sizes::A] [typekind=Record] [sizeof=8] [alignof=4] 215411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=A:[[@LINE+1]]:8 (Definition) [type=Sizes::A] [typekind=Record] [sizeof=8] [alignof=4] 216411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct A { 217411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int a; 218411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char b; 219411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 220411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 221411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=B:[[@LINE+2]]:8 (Definition) [type=Sizes::B] [typekind=Record] [sizeof=12] [alignof=4] 222411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=B:[[@LINE+1]]:8 (Definition) [type=Sizes::B] [typekind=Record] [sizeof=12] [alignof=4] 223411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct B : A { 224411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char c; 225411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 226411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 227411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=C:[[@LINE+2]]:8 (Definition) [type=Sizes::C] [typekind=Record] [sizeof=8] [alignof=4] 228411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=C:[[@LINE+1]]:8 (Definition) [type=Sizes::C] [typekind=Record] [sizeof=8] [alignof=4] 229411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct C { 230411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// Make fields private so C won't be a POD type. 231411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisprivate: 232411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int a; 233411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char b; 234411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 235411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 236411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=D:[[@LINE+2]]:8 (Definition) [type=Sizes::D] [typekind=Record] [sizeof=8] [alignof=4] 237411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=D:[[@LINE+1]]:8 (Definition) [type=Sizes::D] [typekind=Record] [sizeof=8] [alignof=4] 238411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct D : C { 239411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char c; 240411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 241411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 242411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=E:[[@LINE+2]]:32 (Definition) [type=Sizes::E] [typekind=Record] [sizeof=5] [alignof=1] 243411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=E:[[@LINE+1]]:32 (Definition) [type=Sizes::E] [typekind=Record] [sizeof=5] [alignof=1] 244411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct __attribute__((packed)) E { 245411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char b; 246411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int a; 247411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 248411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 249411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=F:[[@LINE+2]]:32 (Definition) [type=Sizes::F] [typekind=Record] [sizeof=6] [alignof=1] 250411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=F:[[@LINE+1]]:32 (Definition) [type=Sizes::F] [typekind=Record] [sizeof=6] [alignof=1] 251411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct __attribute__((packed)) F : E { 252411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char d; 253411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 254411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 255411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct G { G(); }; 256411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=H:[[@LINE+2]]:8 (Definition) [type=Sizes::H] [typekind=Record] [sizeof=1] [alignof=1] 257411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=H:[[@LINE+1]]:8 (Definition) [type=Sizes::H] [typekind=Record] [sizeof=1] [alignof=1] 258411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct H : G { }; 259411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 260411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=I:[[@LINE+2]]:8 (Definition) [type=Sizes::I] [typekind=Record] [sizeof=5] [alignof=1] 261411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=I:[[@LINE+1]]:8 (Definition) [type=Sizes::I] [typekind=Record] [sizeof=5] [alignof=1] 262411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct I { 263411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char b; 264411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int a; 265411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} __attribute__((packed)); 266411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 267411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 268411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 269411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace Test1 { 270411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 271411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// Test complex class hierarchy 272411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct A { }; 273411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct B : A { virtual void b(); }; 274411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass C : virtual A { int c; }; 275411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct D : virtual B { }; 276411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct E : C, virtual D { }; 277411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass F : virtual E { }; 278411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=G:[[@LINE+2]]:8 (Definition) [type=Test1::G] [typekind=Record] [sizeof=24] [alignof=8] 279411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=G:[[@LINE+1]]:8 (Definition) [type=Test1::G] [typekind=Record] [sizeof=16] [alignof=4] 280411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct G : virtual E, F { }; 281411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 282411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 283411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 284411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace Test2 { 285411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 286411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// Test that this somewhat complex class structure is laid out correctly. 287411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct A { }; 288411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct B : A { virtual void b(); }; 289411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct C : virtual B { }; 290411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct D : virtual A { }; 291411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct E : virtual B, D { }; 292411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct F : E, virtual C { }; 293411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct G : virtual F, A { }; 294411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=H:[[@LINE+2]]:8 (Definition) [type=Test2::H] [typekind=Record] [sizeof=24] [alignof=8] 295411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=H:[[@LINE+1]]:8 (Definition) [type=Test2::H] [typekind=Record] [sizeof=12] [alignof=4] 296411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct H { G g; }; 297411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 298411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 299411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 300411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace Test3 { 301411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: ClassDecl=B:[[@LINE+2]]:7 (Definition) [type=Test3::B] [typekind=Record] [sizeof=16] [alignof=8] 302411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: ClassDecl=B:[[@LINE+1]]:7 (Definition) [type=Test3::B] [typekind=Record] [sizeof=8] [alignof=4] 303411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass B { 304411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidispublic: 305411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis virtual void b(){} 306411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=b_field:[[@LINE+2]]:8 (Definition) [type=long] [typekind=Long] [sizeof=8] [alignof=8] [offsetof=64] 307411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=b_field:[[@LINE+1]]:8 (Definition) [type=long] [typekind=Long] [sizeof=4] [alignof=4] [offsetof=32] 308411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis long b_field; 309411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisprotected: 310411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisprivate: 311411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 312411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 313411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: ClassDecl=A:[[@LINE+1]]:7 (Definition) [type=Test3::A] [typekind=Record] [sizeof=16] [alignof=4] 314411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass A : public B { 315411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidispublic: 316411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=a_field:[[@LINE+2]]:7 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=128] 317411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=a_field:[[@LINE+1]]:7 (Definition) [type=int] [typekind=Int] [sizeof=4] [alignof=4] [offsetof=64] 318411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int a_field; 319411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis virtual void a(){} 320411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=one:[[@LINE+2]]:8 (Definition) [type=char] [typekind=Char_S] [sizeof=1] [alignof=1] [offsetof=160] 321411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=one:[[@LINE+1]]:8 (Definition) [type=char] [typekind=Char_S] [sizeof=1] [alignof=1] [offsetof=96] 322411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis char one; 323411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisprotected: 324411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisprivate: 325411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 326411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 327411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: ClassDecl=D:[[@LINE+2]]:7 (Definition) [type=Test3::D] [typekind=Record] [sizeof=16] [alignof=8] 328411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: ClassDecl=D:[[@LINE+1]]:7 (Definition) [type=Test3::D] [typekind=Record] [sizeof=12] [alignof=4] 329411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass D { 330411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidispublic: 331411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis virtual void b(){} 332411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=a:[[@LINE+2]]:10 (Definition) [type=double] [typekind=Double] [sizeof=8] [alignof=8] [offsetof=64] 333411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=a:[[@LINE+1]]:10 (Definition) [type=double] [typekind=Double] [sizeof=8] [alignof=4] [offsetof=32] 334411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis double a; 335411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 336411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 337411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: ClassDecl=C:[[@LINE+2]]:7 (Definition) [type=Test3::C] [typekind=Record] [sizeof=88] [alignof=8] 338411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: ClassDecl=C:[[@LINE+1]]:7 (Definition) [type=Test3::C] [typekind=Record] [sizeof=60] [alignof=4] 339411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisclass C : public virtual A, 340411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis public D, public B { 341411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidispublic: 342411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis double c1_field; 343411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int c2_field; 344411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis double c3_field; 345411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int c4_field; 346411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis virtual void foo(){} 347411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis virtual void bar(){} 348411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisprotected: 349411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisprivate: 350411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 351411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 352411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct BaseStruct 353411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis{ 354411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis BaseStruct(){} 355411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis double v0; 356411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis float v1; 357411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=fg:[[@LINE+2]]:7 (Definition) [type=Test3::C] [typekind=Record] [sizeof=88] [alignof=8] [offsetof=128] 358411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=fg:[[@LINE+1]]:7 (Definition) [type=Test3::C] [typekind=Record] [sizeof=60] [alignof=4] [offsetof=96] 359411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis C fg; 360411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: FieldDecl=rg:[[@LINE+2]]:8 (Definition) [type=Test3::C &] [typekind=LValueReference] [sizeof=88] [alignof=8] [offsetof=832] 361411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: FieldDecl=rg:[[@LINE+1]]:8 (Definition) [type=Test3::C &] [typekind=LValueReference] [sizeof=60] [alignof=4] [offsetof=576] 362411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis C &rg; 363411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int x; 364411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 365411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 366411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 367411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 368411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace NotConstantSize { 369411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 370411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisvoid f(int i) { 3714c4f6fe2a6d6b3ffd0ce114cb8099366662b67f7Argyrios Kyrtzidis// CHECK32: VarDecl=v2:[[@LINE+1]]:8 (Definition) [type=int [i]] [typekind=VariableArray] [sizeof=-4] [alignof=4] 372411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int v2[i]; 373411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis { 374411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis struct CS1 { 3751a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay int f1[i]; 3761a554f72f2cf3615e5625e0922afc6b2a02a8a94Matt Beaumont-Gay float f2; 377411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis }; 378411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis } 379411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 380411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 381411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 382411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 383411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisnamespace CrashTest { 384411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// test crash scenarios on dependent types. 385411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidistemplate<typename T> 386411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct Foo { 387411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis T t; 388411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis int a; 389411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 390411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 391411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios KyrtzidisFoo<Sizes::A> t1; 392411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios KyrtzidisFoo<Sizes::I> t2; 393411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 394411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisvoid c; 395411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 396411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisplopplop; 397411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 398411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK64: StructDecl=lastValid:[[@LINE+2]]:8 (Definition) [type=CrashTest::lastValid] [typekind=Record] [sizeof=1] [alignof=1] 399411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis// CHECK32: StructDecl=lastValid:[[@LINE+1]]:8 (Definition) [type=CrashTest::lastValid] [typekind=Record] [sizeof=1] [alignof=1] 400411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidisstruct lastValid { 401411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis}; 402411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis 403411d33aa0b0d3bc9b2faec40cd821bdd836094abArgyrios Kyrtzidis} 404