Bitfields are represented as LF_MEMBER records whose TypeIndex points to an LF_BITFIELD record that describes the bit width, bit offset, and underlying type of the bitfield. All we need to do is resolve these when resolving record types. llvm-svn: 346511
62 lines
1.9 KiB
C++
62 lines
1.9 KiB
C++
// clang-format off
|
|
// REQUIRES: lld
|
|
|
|
// Test various interesting cases for AST reconstruction.
|
|
// RUN: clang-cl /Z7 /GS- /GR- /std:c++latest -Xclang -fkeep-static-consts /c /Fo%t.obj -- %s
|
|
// RUN: lld-link /DEBUG /nodefaultlib /entry:main /OUT:%t.exe /PDB:%t.pdb -- %t.obj
|
|
// RUN: env LLDB_USE_NATIVE_PDB_READER=1 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
|