| // clang-format off | |
| // REQUIRES: lld, x86 | |
| // Test various interesting cases for AST reconstruction. | |
| // RUN: %clang_cl --target=x86_64-windows-msvc -Od -Z7 -c /Fo%t.obj -- %s | |
| // RUN: lld-link -debug:full -nodefaultlib -entry:main %t.obj -out:%t.exe -pdb:%t.pdb | |
| // RUN: %lldb -f %t.exe -s \ | |
| // RUN: %p/Inputs/bitfields.lldbinit 2>&1 | FileCheck %s | |
| // Test trivial versions of each tag type. | |
| struct Struct { | |
| int A : 5 = 6; | |
| int B : 7 = 8; | |
| unsigned C : 3 = 2; | |
| unsigned D : 15 = 12345; | |
| char E : 1 = 0; | |
| char F : 2 = 1; | |
| char G : 3 = 2; | |
| // H should be at offset 0 of a new byte. | |
| char H : 3 = 3; | |
| }; | |
| constexpr Struct TheStruct; | |
| int main(int argc, char **argv) { | |
| return TheStruct.A; | |
| } | |
| // CHECK: (lldb) target variable -T TheStruct | |
| // CHECK: (const Struct) TheStruct = { | |
| // CHECK: (int:5) A = 6 | |
| // CHECK: (int:7) B = 8 | |
| // CHECK: (unsigned int:3) C = 2 | |
| // CHECK: (unsigned int:15) D = 12345 | |
| // CHECK: (char:1) E = '\0' | |
| // CHECK: (char:2) F = '\x01' | |
| // CHECK: (char:3) G = '\x02' | |
| // CHECK: (char:3) H = '\x03' | |
| // CHECK: } | |
| // | |
| // CHECK: target modules dump ast | |
| // CHECK: Dumping clang ast for 1 modules. | |
| // CHECK: TranslationUnitDecl {{.*}} | |
| // CHECK: |-CXXRecordDecl {{.*}} struct Struct definition | |
| // CHECK: | |-FieldDecl {{.*}} A 'int' | |
| // CHECK: | | `-IntegerLiteral {{.*}} 'int' 5 | |
| // CHECK: | |-FieldDecl {{.*}} B 'int' | |
| // CHECK: | | `-IntegerLiteral {{.*}} 'int' 7 | |
| // CHECK: | |-FieldDecl {{.*}} C 'unsigned int' | |
| // CHECK: | | `-IntegerLiteral {{.*}} 'int' 3 | |
| // CHECK: | |-FieldDecl {{.*}} D 'unsigned int' | |
| // CHECK: | | `-IntegerLiteral {{.*}} 'int' 15 | |
| // CHECK: | |-FieldDecl {{.*}} E 'char' | |
| // CHECK: | | `-IntegerLiteral {{.*}} 'int' 1 | |
| // CHECK: | |-FieldDecl {{.*}} F 'char' | |
| // CHECK: | | `-IntegerLiteral {{.*}} 'int' 2 | |
| // CHECK: | |-FieldDecl {{.*}} G 'char' | |
| // CHECK: | | `-IntegerLiteral {{.*}} 'int' 3 | |
| // CHECK: | `-FieldDecl {{.*}} H 'char' | |
| // CHECK: | `-IntegerLiteral {{.*}} 'int' 3 |