129 lines · cpp
1// RUN: %clangxx --target=x86_64-apple-macosx -c -gdwarf -o %t %s2// RUN: %lldb %t \3// RUN: -o "target var global" \4// RUN: -o "target var global2" \5// RUN: -o "target var global3" \6// RUN: -o "target var global4" \7// RUN: -o "target var global5" \8// RUN: -o "image dump ast" \9// RUN: -o exit | FileCheck %s10 11// CHECK: (lldb) image dump ast12// CHECK: CXXRecordDecl {{.*}} struct Foo definition13// CHECK: |-FieldDecl {{.*}} data 'char[5]'14// CHECK-NEXT: |-FieldDecl {{.*}} padding 'Empty'15// CHECK-NEXT: `-FieldDecl {{.*}} flag 'unsigned long'16// CHECK-NEXT: `-ConstantExpr {{.*}}17// CHECK-NEXT: |-value: Int 118// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 119 20struct Empty {};21struct Empty2 {};22struct Empty3 {};23 24struct Foo {25 char data[5];26 [[no_unique_address]] Empty padding;27 unsigned long flag : 1;28};29 30Foo global;31 32// CHECK: CXXRecordDecl {{.*}} struct ConsecutiveOverlap definition33// CHECK: |-FieldDecl {{.*}} data 'char[5]'34// CHECK-NEXT: |-FieldDecl {{.*}} p1 'Empty'35// CHECK-NEXT: |-FieldDecl {{.*}} p2 'Empty2'36// CHECK-NEXT: |-FieldDecl {{.*}} p3 'Empty3'37// CHECK-NEXT: `-FieldDecl {{.*}} flag 'unsigned long'38// CHECK-NEXT: `-ConstantExpr {{.*}}39// CHECK-NEXT: |-value: Int 140// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 141 42struct ConsecutiveOverlap {43 char data[5];44 [[no_unique_address]] Empty p1;45 [[no_unique_address]] Empty2 p2;46 [[no_unique_address]] Empty3 p3;47 unsigned long flag : 1;48};49 50ConsecutiveOverlap global2;51 52// FIXME: we fail to deduce the unnamed bitfields here.53//54// CHECK: CXXRecordDecl {{.*}} struct MultipleAtOffsetZero definition55// CHECK: |-FieldDecl {{.*}} data 'char[5]'56// CHECK-NEXT: |-FieldDecl {{.*}} p1 'Empty'57// CHECK-NEXT: |-FieldDecl {{.*}} f1 'unsigned long'58// CHECK-NEXT: | `-ConstantExpr {{.*}}59// CHECK-NEXT: | |-value: Int 160// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 161// CHECK-NEXT: |-FieldDecl {{.*}} p2 'Empty2'62// CHECK-NEXT: `-FieldDecl {{.*}} f2 'unsigned long'63// CHECK-NEXT: | `-ConstantExpr {{.*}}64// CHECK-NEXT: | |-value: Int 165// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 166 67struct MultipleAtOffsetZero {68 char data[5];69 [[no_unique_address]] Empty p1;70 int : 4;71 unsigned long f1 : 1;72 [[no_unique_address]] Empty2 p2;73 int : 4;74 unsigned long f2 : 1;75};76 77MultipleAtOffsetZero global3;78 79// FIXME: we fail to deduce the unnamed bitfields here.80//81// CHECK: CXXRecordDecl {{.*}} struct MultipleEmpty definition82// CHECK: |-FieldDecl {{.*}} data 'char[5]'83// CHECK-NEXT: |-FieldDecl {{.*}} p1 'Empty'84// CHECK-NEXT: |-FieldDecl {{.*}} f1 'unsigned long'85// CHECK-NEXT: | `-ConstantExpr {{.*}}86// CHECK-NEXT: | |-value: Int 187// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 188// CHECK-NEXT: |-FieldDecl {{.*}} p2 'Empty'89// CHECK-NEXT: `-FieldDecl {{.*}} f2 'unsigned long'90// CHECK-NEXT: | `-ConstantExpr {{.*}}91// CHECK-NEXT: | |-value: Int 192// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 193 94struct MultipleEmpty {95 char data[5];96 [[no_unique_address]] Empty p1;97 int : 4;98 unsigned long f1 : 1;99 [[no_unique_address]] Empty p2;100 int : 4;101 unsigned long f2 : 1;102};103 104MultipleEmpty global4;105 106// CHECK: CXXRecordDecl {{.*}} struct FieldBitfieldOverlap definition107// CHECK: |-FieldDecl {{.*}} a 'int'108// CHECK-NEXT: | `-ConstantExpr {{.*}}109// CHECK-NEXT: | |-value: Int 3110// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 3111// CHECK-NEXT: |-FieldDecl {{.*}} p1 'Empty'112// CHECK-NEXT: |-FieldDecl {{.*}} b 'int'113// CHECK-NEXT: | `-ConstantExpr {{.*}}114// CHECK-NEXT: | |-value: Int 6115// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 6116// CHECK-NEXT: `-FieldDecl {{.*}} c 'int'117// CHECK-NEXT: `-ConstantExpr {{.*}}118// CHECK-NEXT: |-value: Int 1119// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1120 121struct FieldBitfieldOverlap {122 int a : 3;123 [[no_unique_address]] Empty p1;124 int b : 6;125 int c : 1;126};127 128FieldBitfieldOverlap global5;129