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