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 {
BaseClassBaseClass6287aa9c9eSJonas 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> {
DerivedClassDerivedClass6987aa9c9eSJonas 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 {
EBOEBO7687aa9c9eSJonas 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> {
PaddedBasesPaddedBases8187aa9c9eSJonas 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
main(int argc,char ** argv)38587aa9c9eSJonas Devlieghere int main(int argc, char **argv) {
38687aa9c9eSJonas Devlieghere return 0;
38787aa9c9eSJonas Devlieghere }
388