1// RUN: %clang --target=x86_64-apple-macosx -c -gdwarf -o %t %s
2// 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 %s
10
11// CHECK: (lldb) image dump ast
12// CHECK: CXXRecordDecl {{.*}} struct Foo definition
13// 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 1
18// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
19
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 definition
33// 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 1
40// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
41
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 definition
55// 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 1
60// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 1
61// CHECK-NEXT: |-FieldDecl {{.*}} p2 'Empty2'
62// CHECK-NEXT: `-FieldDecl {{.*}} f2 'unsigned long'
63// CHECK-NEXT: | `-ConstantExpr {{.*}}
64// CHECK-NEXT: | |-value: Int 1
65// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 1
66
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 definition
82// 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 1
87// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 1
88// CHECK-NEXT: |-FieldDecl {{.*}} p2 'Empty'
89// CHECK-NEXT: `-FieldDecl {{.*}} f2 'unsigned long'
90// CHECK-NEXT: | `-ConstantExpr {{.*}}
91// CHECK-NEXT: | |-value: Int 1
92// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 1
93
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 definition
107// CHECK: |-FieldDecl {{.*}} a 'int'
108// CHECK-NEXT: | `-ConstantExpr {{.*}}
109// CHECK-NEXT: | |-value: Int 3
110// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 3
111// CHECK-NEXT: |-FieldDecl {{.*}} p1 'Empty'
112// CHECK-NEXT: |-FieldDecl {{.*}} b 'int'
113// CHECK-NEXT: | `-ConstantExpr {{.*}}
114// CHECK-NEXT: | |-value: Int 6
115// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 6
116// CHECK-NEXT: `-FieldDecl {{.*}} c 'int'
117// CHECK-NEXT: `-ConstantExpr {{.*}}
118// CHECK-NEXT: |-value: Int 1
119// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
120
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

source code of lldb/test/Shell/SymbolFile/DWARF/x86/no_unique_address-with-bitfields.cpp