1*87aa9c9eSJonas Devlieghere // clang-format off 2*87aa9c9eSJonas Devlieghere // REQUIRES: lld 3*87aa9c9eSJonas Devlieghere 4*87aa9c9eSJonas Devlieghere // Test various interesting cases for AST reconstruction. 5*87aa9c9eSJonas Devlieghere // RUN: %build --compiler=clang-cl --nodefaultlib -o %t.exe -- %s 6*87aa9c9eSJonas Devlieghere // RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \ 7*87aa9c9eSJonas Devlieghere // RUN: %p/Inputs/bitfields.lldbinit 2>&1 | FileCheck %s 8*87aa9c9eSJonas Devlieghere 9*87aa9c9eSJonas Devlieghere // Test trivial versions of each tag type. 10*87aa9c9eSJonas Devlieghere struct Struct { 11*87aa9c9eSJonas Devlieghere int A : 5 = 6; 12*87aa9c9eSJonas Devlieghere int B : 7 = 8; 13*87aa9c9eSJonas Devlieghere unsigned C : 3 = 2; 14*87aa9c9eSJonas Devlieghere unsigned D : 15 = 12345; 15*87aa9c9eSJonas Devlieghere char E : 1 = 0; 16*87aa9c9eSJonas Devlieghere char F : 2 = 1; 17*87aa9c9eSJonas Devlieghere char G : 3 = 2; 18*87aa9c9eSJonas Devlieghere // H should be at offset 0 of a new byte. 19*87aa9c9eSJonas Devlieghere char H : 3 = 3; 20*87aa9c9eSJonas Devlieghere }; 21*87aa9c9eSJonas Devlieghere 22*87aa9c9eSJonas Devlieghere constexpr Struct TheStruct; 23*87aa9c9eSJonas Devlieghere 24*87aa9c9eSJonas Devlieghere 25*87aa9c9eSJonas Devlieghere int main(int argc, char **argv) { 26*87aa9c9eSJonas Devlieghere return TheStruct.A; 27*87aa9c9eSJonas Devlieghere } 28*87aa9c9eSJonas Devlieghere 29*87aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T TheStruct 30*87aa9c9eSJonas Devlieghere // CHECK: (const Struct) TheStruct = { 31*87aa9c9eSJonas Devlieghere // CHECK: (int:5) A = 6 32*87aa9c9eSJonas Devlieghere // CHECK: (int:7) B = 8 33*87aa9c9eSJonas Devlieghere // CHECK: (unsigned int:3) C = 2 34*87aa9c9eSJonas Devlieghere // CHECK: (unsigned int:15) D = 12345 35*87aa9c9eSJonas Devlieghere // CHECK: (char:1) E = '\0' 36*87aa9c9eSJonas Devlieghere // CHECK: (char:2) F = '\x01' 37*87aa9c9eSJonas Devlieghere // CHECK: (char:3) G = '\x02' 38*87aa9c9eSJonas Devlieghere // CHECK: (char:3) H = '\x03' 39*87aa9c9eSJonas Devlieghere // CHECK: } 40*87aa9c9eSJonas Devlieghere // 41*87aa9c9eSJonas Devlieghere // CHECK: target modules dump ast 42*87aa9c9eSJonas Devlieghere // CHECK: Dumping clang ast for 1 modules. 43*87aa9c9eSJonas Devlieghere // CHECK: TranslationUnitDecl {{.*}} 44*87aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct Struct definition 45*87aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} A 'int' 46*87aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 5 47*87aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} B 'int' 48*87aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 7 49*87aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} C 'unsigned int' 50*87aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 3 51*87aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} D 'unsigned int' 52*87aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 15 53*87aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} E 'char' 54*87aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 1 55*87aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} F 'char' 56*87aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 2 57*87aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} G 'char' 58*87aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 3 59*87aa9c9eSJonas Devlieghere // CHECK: | `-FieldDecl {{.*}} H 'char' 60*87aa9c9eSJonas Devlieghere // CHECK: | `-IntegerLiteral {{.*}} 'int' 3 61