xref: /llvm-project/lldb/test/Shell/SymbolFile/NativePDB/bitfields.cpp (revision cf3464bbb796d492bcd4e764ada945304e0c874f)
187aa9c9eSJonas Devlieghere // clang-format off
2eb50b643SPavel Labath // REQUIRES: lld, x86
387aa9c9eSJonas Devlieghere 
487aa9c9eSJonas Devlieghere // Test various interesting cases for AST reconstruction.
5eb50b643SPavel Labath // RUN: %clang_cl --target=x86_64-windows-msvc -Od -Z7 -c /Fo%t.obj -- %s
6eb50b643SPavel Labath // RUN: lld-link -debug:full -nodefaultlib -entry:main %t.obj -out:%t.exe -pdb:%t.pdb
7*cf3464bbSJonas Devlieghere // RUN: %lldb -f %t.exe -s \
887aa9c9eSJonas Devlieghere // RUN:     %p/Inputs/bitfields.lldbinit 2>&1 | FileCheck %s
987aa9c9eSJonas Devlieghere 
1087aa9c9eSJonas Devlieghere // Test trivial versions of each tag type.
1187aa9c9eSJonas Devlieghere struct Struct {
1287aa9c9eSJonas Devlieghere   int A : 5 = 6;
1387aa9c9eSJonas Devlieghere   int B : 7 = 8;
1487aa9c9eSJonas Devlieghere   unsigned C : 3 = 2;
1587aa9c9eSJonas Devlieghere   unsigned D : 15 = 12345;
1687aa9c9eSJonas Devlieghere   char E : 1 = 0;
1787aa9c9eSJonas Devlieghere   char F : 2 = 1;
1887aa9c9eSJonas Devlieghere   char G : 3 = 2;
1987aa9c9eSJonas Devlieghere   // H should be at offset 0 of a new byte.
2087aa9c9eSJonas Devlieghere   char H : 3 = 3;
2187aa9c9eSJonas Devlieghere };
2287aa9c9eSJonas Devlieghere 
2387aa9c9eSJonas Devlieghere constexpr Struct TheStruct;
2487aa9c9eSJonas Devlieghere 
2587aa9c9eSJonas Devlieghere 
2687aa9c9eSJonas Devlieghere int main(int argc, char **argv) {
2787aa9c9eSJonas Devlieghere   return TheStruct.A;
2887aa9c9eSJonas Devlieghere }
2987aa9c9eSJonas Devlieghere 
3087aa9c9eSJonas Devlieghere // CHECK: (lldb) target variable -T TheStruct
3187aa9c9eSJonas Devlieghere // CHECK: (const Struct) TheStruct = {
3287aa9c9eSJonas Devlieghere // CHECK:   (int:5) A = 6
3387aa9c9eSJonas Devlieghere // CHECK:   (int:7) B = 8
3487aa9c9eSJonas Devlieghere // CHECK:   (unsigned int:3) C = 2
3587aa9c9eSJonas Devlieghere // CHECK:   (unsigned int:15) D = 12345
3687aa9c9eSJonas Devlieghere // CHECK:   (char:1) E = '\0'
3787aa9c9eSJonas Devlieghere // CHECK:   (char:2) F = '\x01'
3887aa9c9eSJonas Devlieghere // CHECK:   (char:3) G = '\x02'
3987aa9c9eSJonas Devlieghere // CHECK:   (char:3) H = '\x03'
4087aa9c9eSJonas Devlieghere // CHECK: }
4187aa9c9eSJonas Devlieghere //
4287aa9c9eSJonas Devlieghere // CHECK: target modules dump ast
4387aa9c9eSJonas Devlieghere // CHECK: Dumping clang ast for 1 modules.
4487aa9c9eSJonas Devlieghere // CHECK: TranslationUnitDecl {{.*}}
4587aa9c9eSJonas Devlieghere // CHECK: |-CXXRecordDecl {{.*}} struct Struct definition
4687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} A 'int'
4787aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 5
4887aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} B 'int'
4987aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 7
5087aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} C 'unsigned int'
5187aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 3
5287aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} D 'unsigned int'
5387aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 15
5487aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} E 'char'
5587aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 1
5687aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} F 'char'
5787aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 2
5887aa9c9eSJonas Devlieghere // CHECK: | |-FieldDecl {{.*}} G 'char'
5987aa9c9eSJonas Devlieghere // CHECK: | | `-IntegerLiteral {{.*}} 'int' 3
6087aa9c9eSJonas Devlieghere // CHECK: | `-FieldDecl {{.*}} H 'char'
6187aa9c9eSJonas Devlieghere // CHECK: |   `-IntegerLiteral {{.*}} 'int' 3
62