187aa9c9eSJonas Devlieghere // clang-format off 2*eb50b643SPavel Labath // REQUIRES: lld, x86 387aa9c9eSJonas Devlieghere 487aa9c9eSJonas Devlieghere // Test that we can display tag types. 5*eb50b643SPavel Labath // RUN: %clang_cl --target=x86_64-windows-msvc -Od -Z7 \ 6*eb50b643SPavel Labath // RUN: -Xclang -fkeep-static-consts -c /Fo%t.obj -- %s 7*eb50b643SPavel Labath // RUN: lld-link -debug:full -nodefaultlib -entry:main %t.obj -out:%t.exe -pdb:%t.pdb 887aa9c9eSJonas Devlieghere // RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \ 987aa9c9eSJonas Devlieghere // RUN: %p/Inputs/globals-classes.lldbinit | FileCheck %s 1087aa9c9eSJonas Devlieghere 1187aa9c9eSJonas Devlieghere enum class EnumType : unsigned { 1287aa9c9eSJonas Devlieghere A = 1, 1387aa9c9eSJonas Devlieghere B = 2 1487aa9c9eSJonas Devlieghere }; 1587aa9c9eSJonas Devlieghere 1687aa9c9eSJonas Devlieghere class ClassNoPadding { 1787aa9c9eSJonas Devlieghere /* [ 0] */ unsigned char a = 86; 1887aa9c9eSJonas Devlieghere /* [ 1] */ char b = 'a'; 1987aa9c9eSJonas Devlieghere /* [ 2] */ bool c = false; 2087aa9c9eSJonas Devlieghere /* [ 3] */ bool d = true; 2187aa9c9eSJonas Devlieghere /* [ 4] */ short e = -1234; 2287aa9c9eSJonas Devlieghere /* [ 6] */ unsigned short f = 8123; 2387aa9c9eSJonas Devlieghere /* [ 8] */ unsigned int g = 123908; 2487aa9c9eSJonas Devlieghere /* [12] */ int h = -890234; 2587aa9c9eSJonas Devlieghere /* [16] */ unsigned long i = 2908234; 2687aa9c9eSJonas Devlieghere /* [20] */ long j = 7234890; 2787aa9c9eSJonas Devlieghere /* [24] */ float k = 908234.12392; 2887aa9c9eSJonas Devlieghere /* [28] */ EnumType l = EnumType::A; 2987aa9c9eSJonas Devlieghere /* [32] */ double m = 23890.897423; 3087aa9c9eSJonas Devlieghere /* [40] */ unsigned long long n = 23490782; 3187aa9c9eSJonas Devlieghere /* [48] */ long long o = -923409823; 3287aa9c9eSJonas Devlieghere /* [56] */ int p[5] = { 2, 3, 5, 8, 13 }; 3387aa9c9eSJonas Devlieghere }; 3487aa9c9eSJonas Devlieghere 3587aa9c9eSJonas Devlieghere class ClassWithPadding { 3687aa9c9eSJonas Devlieghere /* [ 0] */ char a = '0'; 3787aa9c9eSJonas Devlieghere // char padding[1]; 3887aa9c9eSJonas Devlieghere /* [ 2] */ short b = 50; 3987aa9c9eSJonas Devlieghere /* [ 4] */ char c[2] = { '0', '1' }; 4087aa9c9eSJonas Devlieghere // char padding[2]; 4187aa9c9eSJonas Devlieghere /* [ 8] */ int d = 100; 4287aa9c9eSJonas Devlieghere /* [12] */ char e = '0'; 4387aa9c9eSJonas Devlieghere // char padding[3]; 4487aa9c9eSJonas Devlieghere /* [16] */ int f = 200; 4587aa9c9eSJonas Devlieghere // char padding[4]; 4687aa9c9eSJonas Devlieghere /* [24] */ long long g = 300; 4787aa9c9eSJonas Devlieghere /* [32] */ char h[3] = { '0', '1', '2' }; 4887aa9c9eSJonas Devlieghere // char padding[5]; 4987aa9c9eSJonas Devlieghere /* [40] */ long long i = 400; 5087aa9c9eSJonas Devlieghere /* [48] */ char j[2] = { '0', '1' }; 5187aa9c9eSJonas Devlieghere // char padding[6]; 5287aa9c9eSJonas Devlieghere /* [56] */ long long k = 500; 5387aa9c9eSJonas Devlieghere /* [64] */ char l = '0'; 5487aa9c9eSJonas Devlieghere // char padding[7]; 5587aa9c9eSJonas Devlieghere /* [72] */ long long m = 600; 5687aa9c9eSJonas Devlieghere } ; 5787aa9c9eSJonas Devlieghere 5887aa9c9eSJonas Devlieghere struct EmptyBase {}; 5987aa9c9eSJonas Devlieghere 6087aa9c9eSJonas Devlieghere template<typename T> 6187aa9c9eSJonas Devlieghere struct BaseClass { 6287aa9c9eSJonas Devlieghere constexpr BaseClass(int N) 6387aa9c9eSJonas Devlieghere : BaseMember(N) {} 6487aa9c9eSJonas Devlieghere 6587aa9c9eSJonas Devlieghere int BaseMember; 6687aa9c9eSJonas Devlieghere }; 6787aa9c9eSJonas Devlieghere 6887aa9c9eSJonas Devlieghere struct DerivedClass : public BaseClass<int> { 6987aa9c9eSJonas Devlieghere constexpr DerivedClass(int Base, int Derived) 7087aa9c9eSJonas Devlieghere : BaseClass(Base), DerivedMember(Derived) {} 7187aa9c9eSJonas Devlieghere 7287aa9c9eSJonas Devlieghere int DerivedMember; 7387aa9c9eSJonas Devlieghere }; 7487aa9c9eSJonas Devlieghere 7587aa9c9eSJonas Devlieghere struct EBO : public EmptyBase { 7687aa9c9eSJonas Devlieghere constexpr EBO(int N) : Member(N) {} 7787aa9c9eSJonas Devlieghere int Member; 7887aa9c9eSJonas Devlieghere }; 7987aa9c9eSJonas Devlieghere 8087aa9c9eSJonas Devlieghere struct PaddedBases : public BaseClass<char>, public BaseClass<short>, BaseClass<int> { 8187aa9c9eSJonas Devlieghere constexpr PaddedBases(char CH, short S, int N, long long D) 8287aa9c9eSJonas Devlieghere : BaseClass<char>(CH), BaseClass<short>(S), BaseClass<int>(N), DerivedMember(D) {} 8387aa9c9eSJonas Devlieghere long long DerivedMember; 8487aa9c9eSJonas Devlieghere }; 8587aa9c9eSJonas Devlieghere 8687aa9c9eSJonas Devlieghere struct Statics { 8787aa9c9eSJonas Devlieghere static char a; 8887aa9c9eSJonas Devlieghere static bool b; 8987aa9c9eSJonas Devlieghere static short c; 9087aa9c9eSJonas Devlieghere static unsigned short d; 9187aa9c9eSJonas Devlieghere static unsigned int e; 9287aa9c9eSJonas Devlieghere static int f; 9387aa9c9eSJonas Devlieghere static unsigned long g; 9487aa9c9eSJonas Devlieghere static long h; 9587aa9c9eSJonas Devlieghere static float i; 9687aa9c9eSJonas Devlieghere static EnumType j; 9787aa9c9eSJonas Devlieghere static double k; 9887aa9c9eSJonas Devlieghere static unsigned long long l; 9987aa9c9eSJonas Devlieghere static long long m; 10087aa9c9eSJonas Devlieghere }; 10187aa9c9eSJonas Devlieghere 10287aa9c9eSJonas Devlieghere char Statics::a = 'a'; 10387aa9c9eSJonas Devlieghere bool Statics::b = true; 10487aa9c9eSJonas Devlieghere short Statics::c = 1234; 10587aa9c9eSJonas Devlieghere unsigned short Statics::d = 2345; 10687aa9c9eSJonas Devlieghere unsigned int Statics::e = 3456; 10787aa9c9eSJonas Devlieghere int Statics::f = 4567; 10887aa9c9eSJonas Devlieghere unsigned long Statics::g = 5678; 10987aa9c9eSJonas Devlieghere long Statics::h = 6789; 11087aa9c9eSJonas Devlieghere float Statics::i = 7890.1234; 11187aa9c9eSJonas Devlieghere EnumType Statics::j = EnumType::A; 11287aa9c9eSJonas Devlieghere double Statics::k = 8901.2345; 11387aa9c9eSJonas Devlieghere unsigned long long Statics::l = 9012345; 11487aa9c9eSJonas Devlieghere long long Statics::m = 1234567; 11587aa9c9eSJonas Devlieghere 11687aa9c9eSJonas Devlieghere 11787aa9c9eSJonas Devlieghere struct Pointers { 11887aa9c9eSJonas Devlieghere void *a = nullptr; 11987aa9c9eSJonas Devlieghere char *b = &Statics::a; 12087aa9c9eSJonas Devlieghere bool *c = &Statics::b; 12187aa9c9eSJonas Devlieghere short *e = &Statics::c; 12287aa9c9eSJonas Devlieghere unsigned short *f = &Statics::d; 12387aa9c9eSJonas Devlieghere unsigned int *g = &Statics::e; 12487aa9c9eSJonas Devlieghere int *h = &Statics::f; 12587aa9c9eSJonas Devlieghere unsigned long *i = &Statics::g; 12687aa9c9eSJonas Devlieghere long *j = &Statics::h; 12787aa9c9eSJonas Devlieghere float *k = &Statics::i; 12887aa9c9eSJonas Devlieghere EnumType *l = &Statics::j; 12987aa9c9eSJonas Devlieghere double *m = &Statics::k; 13087aa9c9eSJonas Devlieghere unsigned long long *n = &Statics::l; 13187aa9c9eSJonas Devlieghere long long *o = &Statics::m; 13287aa9c9eSJonas Devlieghere }; 13387aa9c9eSJonas Devlieghere 13487aa9c9eSJonas Devlieghere struct References { 13587aa9c9eSJonas Devlieghere char &a = Statics::a; 13687aa9c9eSJonas Devlieghere bool &b = Statics::b; 13787aa9c9eSJonas Devlieghere short &c = Statics::c; 13887aa9c9eSJonas Devlieghere unsigned short &d = Statics::d; 13987aa9c9eSJonas Devlieghere unsigned int &e = Statics::e; 14087aa9c9eSJonas Devlieghere int &f = Statics::f; 14187aa9c9eSJonas Devlieghere unsigned long &g = Statics::g; 14287aa9c9eSJonas Devlieghere long &h = Statics::h; 14387aa9c9eSJonas Devlieghere float &i = Statics::i; 14487aa9c9eSJonas Devlieghere EnumType &j = Statics::j; 14587aa9c9eSJonas Devlieghere double &k = Statics::k; 14687aa9c9eSJonas Devlieghere unsigned long long &l = Statics::l; 14787aa9c9eSJonas Devlieghere long long &m = Statics::m; 14887aa9c9eSJonas Devlieghere }; 14987aa9c9eSJonas Devlieghere 15087aa9c9eSJonas Devlieghere 15187aa9c9eSJonas Devlieghere constexpr ClassWithPadding ClassWithPaddingInstance; 15287aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T ClassWithPaddingInstance 15387aa9c9eSJonas Devlieghere // CHECK-NEXT: (const ClassWithPadding) ClassWithPaddingInstance = { 15487aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) a = '0' 15587aa9c9eSJonas Devlieghere // CHECK-NEXT: (short) b = 50 15687aa9c9eSJonas Devlieghere // CHECK-NEXT: (char [2]) c = "01" 15787aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) d = 100 15887aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) e = '0' 15987aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) f = 200 16087aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long) g = 300 16187aa9c9eSJonas Devlieghere // CHECK-NEXT: (char [3]) h = "012" 16287aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long) i = 400 16387aa9c9eSJonas Devlieghere // CHECK-NEXT: (char [2]) j = "01" 16487aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long) k = 500 16587aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) l = '0' 16687aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long) m = 600 16787aa9c9eSJonas Devlieghere // CHECK-NEXT: } 16887aa9c9eSJonas Devlieghere 16987aa9c9eSJonas Devlieghere constexpr ClassNoPadding ClassNoPaddingInstance; 17087aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T ClassNoPaddingInstance 17187aa9c9eSJonas Devlieghere // CHECK-NEXT: (const ClassNoPadding) ClassNoPaddingInstance = { 17287aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned char) a = 'V' 17387aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) b = 'a' 17487aa9c9eSJonas Devlieghere // CHECK-NEXT: (bool) c = false 17587aa9c9eSJonas Devlieghere // CHECK-NEXT: (bool) d = true 17687aa9c9eSJonas Devlieghere // CHECK-NEXT: (short) e = -1234 17787aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned short) f = 8123 17887aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned int) g = 123908 17987aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) h = -890234 18087aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned long) i = 2908234 18187aa9c9eSJonas Devlieghere // CHECK-NEXT: (long) j = 7234890 18287aa9c9eSJonas Devlieghere // CHECK-NEXT: (float) k = 908234.125 18387aa9c9eSJonas Devlieghere // CHECK-NEXT: (EnumType) l = A 18487aa9c9eSJonas Devlieghere // CHECK-NEXT: (double) m = 23890.897422999999 18587aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned long long) n = 23490782 18687aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long) o = -923409823 18787aa9c9eSJonas Devlieghere // CHECK-NEXT: (int [5]) p = { 18887aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) [0] = 2 18987aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) [1] = 3 19087aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) [2] = 5 19187aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) [3] = 8 19287aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) [4] = 13 19387aa9c9eSJonas Devlieghere // CHECK-NEXT: } 19487aa9c9eSJonas Devlieghere // CHECK-NEXT: } 19587aa9c9eSJonas Devlieghere 19687aa9c9eSJonas Devlieghere constexpr DerivedClass DC(10, 20); 19787aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T DC 19887aa9c9eSJonas Devlieghere // CHECK-NEXT: (const DerivedClass) DC = { 19987aa9c9eSJonas Devlieghere // CHECK-NEXT: (BaseClass<int>) BaseClass<int> = { 20087aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) BaseMember = 10 20187aa9c9eSJonas Devlieghere // CHECK-NEXT: } 20287aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) DerivedMember = 20 20387aa9c9eSJonas Devlieghere // CHECK-NEXT: } 20487aa9c9eSJonas Devlieghere 20587aa9c9eSJonas Devlieghere constexpr EBO EBOC(20); 20687aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T EBOC 20787aa9c9eSJonas Devlieghere // CHECK-NEXT: (const EBO) EBOC = { 20887aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) Member = 20 20987aa9c9eSJonas Devlieghere // CHECK-NEXT: } 21087aa9c9eSJonas Devlieghere 21187aa9c9eSJonas Devlieghere constexpr PaddedBases PBC('a', 12, 120, 1200); 21287aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T PBC 21387aa9c9eSJonas Devlieghere // CHECK-NEXT: (const PaddedBases) PBC = { 21487aa9c9eSJonas Devlieghere // CHECK-NEXT: (BaseClass<char>) BaseClass<char> = { 21587aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) BaseMember = 97 21687aa9c9eSJonas Devlieghere // CHECK-NEXT: } 21787aa9c9eSJonas Devlieghere // CHECK-NEXT: (BaseClass<short>) BaseClass<short> = { 21887aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) BaseMember = 12 21987aa9c9eSJonas Devlieghere // CHECK-NEXT: } 22087aa9c9eSJonas Devlieghere // CHECK-NEXT: (BaseClass<int>) BaseClass<int> = { 22187aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) BaseMember = 120 22287aa9c9eSJonas Devlieghere // CHECK-NEXT: } 22387aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long) DerivedMember = 1200 22487aa9c9eSJonas Devlieghere // CHECK-NEXT: } 22587aa9c9eSJonas Devlieghere 22687aa9c9eSJonas Devlieghere constexpr struct { 22787aa9c9eSJonas Devlieghere int x = 12; 22887aa9c9eSJonas Devlieghere EBO EBOC{ 42 }; 22987aa9c9eSJonas Devlieghere } UnnamedClassInstance; 23087aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T UnnamedClassInstance 23187aa9c9eSJonas Devlieghere // CHECK-NEXT: (const <unnamed-type-UnnamedClassInstance>) UnnamedClassInstance = { 23287aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) x = 12 23387aa9c9eSJonas Devlieghere // CHECK-NEXT: (EBO) EBOC = { 23487aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) Member = 42 23587aa9c9eSJonas Devlieghere // CHECK-NEXT: } 23687aa9c9eSJonas Devlieghere // CHECK-NEXT: } 23787aa9c9eSJonas Devlieghere 23887aa9c9eSJonas Devlieghere constexpr Pointers PointersInstance; 23987aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T PointersInstance 24087aa9c9eSJonas Devlieghere // CHECK-NEXT: (const Pointers) PointersInstance = { 24187aa9c9eSJonas Devlieghere // CHECK-NEXT: (void *) a = {{.*}} 24287aa9c9eSJonas Devlieghere // CHECK-NEXT: (char *) b = {{.*}} 24387aa9c9eSJonas Devlieghere // CHECK-NEXT: (bool *) c = {{.*}} 24487aa9c9eSJonas Devlieghere // CHECK-NEXT: (short *) e = {{.*}} 24587aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned short *) f = {{.*}} 24687aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned int *) g = {{.*}} 24787aa9c9eSJonas Devlieghere // CHECK-NEXT: (int *) h = {{.*}} 24887aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned long *) i = {{.*}} 24987aa9c9eSJonas Devlieghere // CHECK-NEXT: (long *) j = {{.*}} 25087aa9c9eSJonas Devlieghere // CHECK-NEXT: (float *) k = {{.*}} 25187aa9c9eSJonas Devlieghere // CHECK-NEXT: (EnumType *) l = {{.*}} 25287aa9c9eSJonas Devlieghere // CHECK-NEXT: (double *) m = {{.*}} 25387aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned long long *) n = {{.*}} 25487aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long *) o = {{.*}} 25587aa9c9eSJonas Devlieghere // CHECK-NEXT: } 25687aa9c9eSJonas Devlieghere constexpr References ReferencesInstance; 25787aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T ReferencesInstance 25887aa9c9eSJonas Devlieghere // CHECK-NEXT: (const References) ReferencesInstance = { 25987aa9c9eSJonas Devlieghere // CHECK-NEXT: (char &) a = {{.*}} 26087aa9c9eSJonas Devlieghere // CHECK-NEXT: (bool &) b = {{.*}} 26187aa9c9eSJonas Devlieghere // CHECK-NEXT: (short &) c = {{.*}} 26287aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned short &) d = {{.*}} 26387aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned int &) e = {{.*}} 26487aa9c9eSJonas Devlieghere // CHECK-NEXT: (int &) f = {{.*}} 26587aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned long &) g = {{.*}} 26687aa9c9eSJonas Devlieghere // CHECK-NEXT: (long &) h = {{.*}} 26787aa9c9eSJonas Devlieghere // CHECK-NEXT: (float &) i = {{.*}} 26887aa9c9eSJonas Devlieghere // CHECK-NEXT: (EnumType &) j = {{.*}} 26987aa9c9eSJonas Devlieghere // CHECK-NEXT: (double &) k = {{.*}} 27087aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned long long &) l = {{.*}} 27187aa9c9eSJonas Devlieghere // CHECK-NEXT: (long long &) m = {{.*}} 27287aa9c9eSJonas Devlieghere // CHECK-NEXT: } 27387aa9c9eSJonas Devlieghere 27487aa9c9eSJonas Devlieghere // CHECK: Dumping clang ast for 1 modules. 27587aa9c9eSJonas Devlieghere // CHECK: TranslationUnitDecl {{.*}} 27687aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} class ClassWithPadding definition 27787aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} a 'char' 27887aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} b 'short' 27987aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} c 'char [2]' 28087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} d 'int' 28187aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} e 'char' 28287aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} f 'int' 28387aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} g 'long long' 28487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} h 'char [3]' 28587aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} i 'long long' 28687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} j 'char [2]' 28787aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} k 'long long' 28887aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} l 'char' 28987aa9c9eSJonas Devlieghere // CHECK: | `-FieldDecl {{.*}} m 'long long' 29087aa9c9eSJonas Devlieghere // CHECK: |-VarDecl {{.*}} ClassWithPaddingInstance 'const ClassWithPadding' 29187aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} class ClassNoPadding definition 29287aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} a 'unsigned char' 29387aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} b 'char' 29487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} c 'bool' 29587aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} d 'bool' 29687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} e 'short' 29787aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} f 'unsigned short' 29887aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} g 'unsigned int' 29987aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} h 'int' 30087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} i 'unsigned long' 30187aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} j 'long' 30287aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} k 'float' 30387aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} l 'EnumType' 30487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} m 'double' 30587aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} n 'unsigned long long' 30687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} o 'long long' 30787aa9c9eSJonas Devlieghere // CHECK: | `-FieldDecl {{.*}} p 'int [5]' 30887aa9c9eSJonas Devlieghere // CHECK: |-VarDecl {{.*}} ClassNoPaddingInstance 'const ClassNoPadding' 30987aa9c9eSJonas Devlieghere // CHECK: |-EnumDecl {{.*}} EnumType 31087aa9c9eSJonas Devlieghere // CHECK: | |-EnumConstantDecl {{.*}} A 'EnumType' 31187aa9c9eSJonas Devlieghere // CHECK: | `-EnumConstantDecl {{.*}} B 'EnumType' 31287aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct DerivedClass definition 31387aa9c9eSJonas Devlieghere // CHECK: | |-public 'BaseClass<int>' 31487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} DerivedMember 'int' 31587aa9c9eSJonas Devlieghere // CHECK: | `-CXXConstructorDecl {{.*}} DerivedClass 'void (int, int)' 31687aa9c9eSJonas Devlieghere // CHECK: | |-ParmVarDecl {{.*}} 'int' 31787aa9c9eSJonas Devlieghere // CHECK: | `-ParmVarDecl {{.*}} 'int' 31887aa9c9eSJonas Devlieghere // CHECK: |-VarDecl {{.*}} DC 'const DerivedClass' 31987aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct BaseClass<int> definition 32087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} BaseMember 'int' 32187aa9c9eSJonas Devlieghere // CHECK: | `-CXXMethodDecl {{.*}} BaseClass 'void (int)' 32287aa9c9eSJonas Devlieghere // CHECK: | `-ParmVarDecl {{.*}} 'int' 32387aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct EBO definition 32487aa9c9eSJonas Devlieghere // CHECK: | |-public 'EmptyBase' 32587aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} Member 'int' 32687aa9c9eSJonas Devlieghere // CHECK: | `-CXXConstructorDecl {{.*}} EBO 'void (int)' 32787aa9c9eSJonas Devlieghere // CHECK: | `-ParmVarDecl {{.*}} 'int' 32887aa9c9eSJonas Devlieghere // CHECK: |-VarDecl {{.*}} EBOC 'const EBO' 32987aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct EmptyBase definition 33087aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct PaddedBases definition 33187aa9c9eSJonas Devlieghere // CHECK: | |-public 'BaseClass<char>' 33287aa9c9eSJonas Devlieghere // CHECK: | |-public 'BaseClass<short>' 33387aa9c9eSJonas Devlieghere // CHECK: | |-public 'BaseClass<int>' 33487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} DerivedMember 'long long' 33587aa9c9eSJonas Devlieghere // CHECK: | `-CXXConstructorDecl {{.*}} PaddedBases 'void (char, short, int, long long)' 33687aa9c9eSJonas Devlieghere // CHECK: | |-ParmVarDecl {{.*}} 'char' 33787aa9c9eSJonas Devlieghere // CHECK: | |-ParmVarDecl {{.*}} 'short' 33887aa9c9eSJonas Devlieghere // CHECK: | |-ParmVarDecl {{.*}} 'int' 33987aa9c9eSJonas Devlieghere // CHECK: | `-ParmVarDecl {{.*}} 'long long' 34087aa9c9eSJonas Devlieghere // CHECK: |-VarDecl {{.*}} PBC 'const PaddedBases' 34187aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct BaseClass<char> definition 34287aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} BaseMember 'int' 34387aa9c9eSJonas Devlieghere // CHECK: | `-CXXMethodDecl {{.*}} BaseClass 'void (int)' 34487aa9c9eSJonas Devlieghere // CHECK: | `-ParmVarDecl {{.*}} 'int' 34587aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct BaseClass<short> definition 34687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} BaseMember 'int' 34787aa9c9eSJonas Devlieghere // CHECK: | `-CXXMethodDecl {{.*}} BaseClass 'void (int)' 34887aa9c9eSJonas Devlieghere // CHECK: | `-ParmVarDecl {{.*}} 'int' 34987aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct <unnamed-type-UnnamedClassInstance> definition 35087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} x 'int' 35187aa9c9eSJonas Devlieghere // CHECK: | `-FieldDecl {{.*}} EBOC 'EBO' 35287aa9c9eSJonas Devlieghere // CHECK: |-VarDecl {{.*}} UnnamedClassInstance 'const <unnamed-type-UnnamedClassInstance>' 35387aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct Pointers definition 35487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} a 'void *' 35587aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} b 'char *' 35687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} c 'bool *' 35787aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} e 'short *' 35887aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} f 'unsigned short *' 35987aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} g 'unsigned int *' 36087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} h 'int *' 36187aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} i 'unsigned long *' 36287aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} j 'long *' 36387aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} k 'float *' 36487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} l 'EnumType *' 36587aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} m 'double *' 36687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} n 'unsigned long long *' 36787aa9c9eSJonas Devlieghere // CHECK: | `-FieldDecl {{.*}} o 'long long *' 36887aa9c9eSJonas Devlieghere // CHECK: |-VarDecl {{.*}} PointersInstance 'const Pointers' 36987aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct References definition 37087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} a 'char &' 37187aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} b 'bool &' 37287aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} c 'short &' 37387aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} d 'unsigned short &' 37487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} e 'unsigned int &' 37587aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} f 'int &' 37687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} g 'unsigned long &' 37787aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} h 'long &' 37887aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} i 'float &' 37987aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} j 'EnumType &' 38087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} k 'double &' 38187aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} l 'unsigned long long &' 38287aa9c9eSJonas Devlieghere // CHECK: | `-FieldDecl {{.*}} m 'long long &' 38387aa9c9eSJonas Devlieghere // CHECK: `-VarDecl {{.*}} ReferencesInstance 'const References' 38487aa9c9eSJonas Devlieghere 38587aa9c9eSJonas Devlieghere int main(int argc, char **argv) { 38687aa9c9eSJonas Devlieghere return 0; 38787aa9c9eSJonas Devlieghere } 388