xref: /aosp_15_r20/external/llvm/test/DebugInfo/X86/debug-info-static-member.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc %s -o %t -filetype=obj -O0 -mtriple=x86_64-unknown-linux-gnu -dwarf-version=4
2*9880d681SAndroid Build Coastguard Worker; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=PRESENT
3*9880d681SAndroid Build Coastguard Worker; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=ABSENT
4*9880d681SAndroid Build Coastguard Worker; RUN: llc %s -o %t -filetype=obj -O0 -mtriple=x86_64-apple-darwin -dwarf-version=4
5*9880d681SAndroid Build Coastguard Worker; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DARWINP
6*9880d681SAndroid Build Coastguard Worker; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s -check-prefix=DARWINA
7*9880d681SAndroid Build Coastguard Worker; Verify that attributes we do want are PRESENT;
8*9880d681SAndroid Build Coastguard Worker; verify that attributes we don't want are ABSENT.
9*9880d681SAndroid Build Coastguard Worker; It's a lot easier to do this in two passes than in one.
10*9880d681SAndroid Build Coastguard Worker; PR14471
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; LLVM IR generated using: clang -emit-llvm -S -g
13*9880d681SAndroid Build Coastguard Worker; (with the Clang part of this patch applied).
14*9880d681SAndroid Build Coastguard Worker;
15*9880d681SAndroid Build Coastguard Worker; class C
16*9880d681SAndroid Build Coastguard Worker; {
17*9880d681SAndroid Build Coastguard Worker;   static int a;
18*9880d681SAndroid Build Coastguard Worker;   const static bool const_a = true;
19*9880d681SAndroid Build Coastguard Worker; protected:
20*9880d681SAndroid Build Coastguard Worker;   static int b;
21*9880d681SAndroid Build Coastguard Worker;   const static float const_b = 3.14;
22*9880d681SAndroid Build Coastguard Worker; public:
23*9880d681SAndroid Build Coastguard Worker;   static int c;
24*9880d681SAndroid Build Coastguard Worker;   const static int const_c = 18;
25*9880d681SAndroid Build Coastguard Worker;   int d;
26*9880d681SAndroid Build Coastguard Worker; };
27*9880d681SAndroid Build Coastguard Worker;
28*9880d681SAndroid Build Coastguard Worker; int C::a = 4;
29*9880d681SAndroid Build Coastguard Worker; int C::b = 2;
30*9880d681SAndroid Build Coastguard Worker; int C::c = 1;
31*9880d681SAndroid Build Coastguard Worker;
32*9880d681SAndroid Build Coastguard Worker; int main()
33*9880d681SAndroid Build Coastguard Worker; {
34*9880d681SAndroid Build Coastguard Worker;         C instance_C;
35*9880d681SAndroid Build Coastguard Worker;         instance_C.d = 8;
36*9880d681SAndroid Build Coastguard Worker;         return C::c;
37*9880d681SAndroid Build Coastguard Worker; }
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker%class.C = type { i32 }
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker@_ZN1C1aE = global i32 4, align 4
42*9880d681SAndroid Build Coastguard Worker@_ZN1C1bE = global i32 2, align 4
43*9880d681SAndroid Build Coastguard Worker@_ZN1C1cE = global i32 1, align 4
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine i32 @main() nounwind uwtable !dbg !5 {
46*9880d681SAndroid Build Coastguard Workerentry:
47*9880d681SAndroid Build Coastguard Worker  %retval = alloca i32, align 4
48*9880d681SAndroid Build Coastguard Worker  %instance_C = alloca %class.C, align 4
49*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* %retval
50*9880d681SAndroid Build Coastguard Worker  call void @llvm.dbg.declare(metadata %class.C* %instance_C, metadata !29, metadata !DIExpression()), !dbg !30
51*9880d681SAndroid Build Coastguard Worker  %d = getelementptr inbounds %class.C, %class.C* %instance_C, i32 0, i32 0, !dbg !31
52*9880d681SAndroid Build Coastguard Worker  store i32 8, i32* %d, align 4, !dbg !31
53*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* @_ZN1C1cE, align 4, !dbg !32
54*9880d681SAndroid Build Coastguard Worker  ret i32 %0, !dbg !32
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker!llvm.dbg.cu = !{!0}
60*9880d681SAndroid Build Coastguard Worker!llvm.module.flags = !{!34}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Worker!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.3 (trunk 171914)", isOptimized: false, emissionKind: FullDebug, file: !33, enums: !1, retainedTypes: !1, globals: !10, imports:  !1)
63*9880d681SAndroid Build Coastguard Worker!1 = !{}
64*9880d681SAndroid Build Coastguard Worker!5 = distinct !DISubprogram(name: "main", line: 18, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 23, file: !33, scope: !6, type: !7, variables: !1)
65*9880d681SAndroid Build Coastguard Worker!6 = !DIFile(filename: "/usr/local/google/home/blaikie/Development/llvm/src/tools/clang/test/CodeGenCXX/debug-info-static-member.cpp", directory: "/home/blaikie/local/Development/llvm/build/clang/x86-64/Debug/llvm")
66*9880d681SAndroid Build Coastguard Worker!7 = !DISubroutineType(types: !8)
67*9880d681SAndroid Build Coastguard Worker!8 = !{!9}
68*9880d681SAndroid Build Coastguard Worker!9 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
69*9880d681SAndroid Build Coastguard Worker!10 = !{!12, !27, !28}
70*9880d681SAndroid Build Coastguard Worker!12 = !DIGlobalVariable(name: "a", linkageName: "_ZN1C1aE", line: 14, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, variable: i32* @_ZN1C1aE, declaration: !15)
71*9880d681SAndroid Build Coastguard Worker!13 = !DICompositeType(tag: DW_TAG_class_type, name: "C", line: 1, size: 32, align: 32, file: !33, elements: !14)
72*9880d681SAndroid Build Coastguard Worker!14 = !{!15, !16, !19, !20, !23, !24, !26}
73*9880d681SAndroid Build Coastguard Worker!15 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 3, flags: DIFlagPrivate | DIFlagStaticMember, file: !33, scope: !13, baseType: !9)
74*9880d681SAndroid Build Coastguard Worker!16 = !DIDerivedType(tag: DW_TAG_member, name: "const_a", line: 4, flags: DIFlagPrivate | DIFlagStaticMember, file: !33, scope: !13, baseType: !17, extraData: i1 true)
75*9880d681SAndroid Build Coastguard Worker!17 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !18)
76*9880d681SAndroid Build Coastguard Worker!18 = !DIBasicType(tag: DW_TAG_base_type, name: "bool", size: 8, align: 8, encoding: DW_ATE_boolean)
77*9880d681SAndroid Build Coastguard Worker!19 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 6, flags: DIFlagProtected | DIFlagStaticMember, file: !33, scope: !13, baseType: !9)
78*9880d681SAndroid Build Coastguard Worker!20 = !DIDerivedType(tag: DW_TAG_member, name: "const_b", line: 7, flags: DIFlagProtected | DIFlagStaticMember, file: !33, scope: !13, baseType: !21, extraData: float 0x40091EB860000000)
79*9880d681SAndroid Build Coastguard Worker!21 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !22)
80*9880d681SAndroid Build Coastguard Worker!22 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)
81*9880d681SAndroid Build Coastguard Worker!23 = !DIDerivedType(tag: DW_TAG_member, name: "c", line: 9, flags: DIFlagPublic | DIFlagStaticMember, file: !33, scope: !13, baseType: !9)
82*9880d681SAndroid Build Coastguard Worker!24 = !DIDerivedType(tag: DW_TAG_member, name: "const_c", line: 10, flags: DIFlagPublic | DIFlagStaticMember, file: !33, scope: !13, baseType: !25, extraData: i32 18)
83*9880d681SAndroid Build Coastguard Worker!25 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !9)
84*9880d681SAndroid Build Coastguard Worker!26 = !DIDerivedType(tag: DW_TAG_member, name: "d", line: 11, size: 32, align: 32, flags: DIFlagPublic, file: !33, scope: !13, baseType: !9)
85*9880d681SAndroid Build Coastguard Worker!27 = !DIGlobalVariable(name: "b", linkageName: "_ZN1C1bE", line: 15, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, variable: i32* @_ZN1C1bE, declaration: !19)
86*9880d681SAndroid Build Coastguard Worker!28 = !DIGlobalVariable(name: "c", linkageName: "_ZN1C1cE", line: 16, isLocal: false, isDefinition: true, scope: null, file: !6, type: !9, variable: i32* @_ZN1C1cE, declaration: !23)
87*9880d681SAndroid Build Coastguard Worker!29 = !DILocalVariable(name: "instance_C", line: 20, scope: !5, file: !6, type: !13)
88*9880d681SAndroid Build Coastguard Worker!30 = !DILocation(line: 20, scope: !5)
89*9880d681SAndroid Build Coastguard Worker!31 = !DILocation(line: 21, scope: !5)
90*9880d681SAndroid Build Coastguard Worker!32 = !DILocation(line: 22, scope: !5)
91*9880d681SAndroid Build Coastguard Worker!33 = !DIFile(filename: "/usr/local/google/home/blaikie/Development/llvm/src/tools/clang/test/CodeGenCXX/debug-info-static-member.cpp", directory: "/home/blaikie/local/Development/llvm/build/clang/x86-64/Debug/llvm")
92*9880d681SAndroid Build Coastguard Worker; PRESENT verifies that static member declarations have these attributes:
93*9880d681SAndroid Build Coastguard Worker; external, declaration, accessibility, and either DW_AT_linkage_name
94*9880d681SAndroid Build Coastguard Worker; (for variables) or DW_AT_const_value (for constants).
95*9880d681SAndroid Build Coastguard Worker;
96*9880d681SAndroid Build Coastguard Worker; PRESENT:      .debug_info contents:
97*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_variable
98*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_specification {{.*}} "a"
99*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_location
100*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1aE"
101*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_class_type
102*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "C"
103*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_member
104*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "a"
105*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_external
106*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_declaration
107*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
108*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_member
109*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "const_a"
110*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_external
111*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_declaration
112*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
113*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_const_value {{.*}} (1)
114*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_member
115*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "b"
116*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
117*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_member
118*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "const_b"
119*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
120*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_const_value [DW_FORM_udata] (1078523331)
121*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_member
122*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "c"
123*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
124*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_member
125*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "const_c"
126*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
127*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_const_value {{.*}} (18)
128*9880d681SAndroid Build Coastguard Worker; While we're here, a normal member has data_member_location and
129*9880d681SAndroid Build Coastguard Worker; accessibility attributes.
130*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_member
131*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_name {{.*}} "d"
132*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_data_member_location
133*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
134*9880d681SAndroid Build Coastguard Worker; PRESENT:      NULL
135*9880d681SAndroid Build Coastguard Worker; Definitions point back to their declarations, and have a location.
136*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_variable
137*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_specification {{.*}} "b"
138*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_location
139*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1bE"
140*9880d681SAndroid Build Coastguard Worker; PRESENT:      DW_TAG_variable
141*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_specification {{.*}} "c"
142*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_location
143*9880d681SAndroid Build Coastguard Worker; PRESENT-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1cE"
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker; For Darwin gdb:
146*9880d681SAndroid Build Coastguard Worker; DARWINP:      .debug_info contents:
147*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_variable
148*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_specification {{.*}} "a"
149*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_location
150*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1aE"
151*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_class_type
152*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "C"
153*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_member
154*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "a"
155*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_external
156*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_declaration
157*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
158*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_member
159*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "const_a"
160*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_external
161*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_declaration
162*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_private)
163*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_const_value {{.*}} (1)
164*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_member
165*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "b"
166*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
167*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_member
168*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "const_b"
169*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_protected)
170*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_const_value [DW_FORM_udata] (1078523331)
171*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_member
172*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "c"
173*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
174*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_member
175*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "const_c"
176*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
177*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_const_value {{.*}} (18)
178*9880d681SAndroid Build Coastguard Worker; While we're here, a normal member has data_member_location and
179*9880d681SAndroid Build Coastguard Worker; accessibility attributes.
180*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_member
181*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_name {{.*}} "d"
182*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_data_member_location
183*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_AT_accessibility [DW_FORM_data1]   (DW_ACCESS_public)
184*9880d681SAndroid Build Coastguard Worker; DARWINP:      NULL
185*9880d681SAndroid Build Coastguard Worker; Definitions point back to their declarations, and have a location.
186*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_variable
187*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_specification {{.*}} "b"
188*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_location
189*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1bE"
190*9880d681SAndroid Build Coastguard Worker; DARWINP:      DW_TAG_variable
191*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_specification {{.*}} "c"
192*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_location
193*9880d681SAndroid Build Coastguard Worker; DARWINP-NEXT: DW_AT_linkage_name {{.*}} "_ZN1C1cE"
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker; ABSENT verifies that static member declarations do not have either
196*9880d681SAndroid Build Coastguard Worker; DW_AT_location or DW_AT_data_member_location; also, variables do not
197*9880d681SAndroid Build Coastguard Worker; have DW_AT_const_value and constants do not have DW_AT_linkage_name.
198*9880d681SAndroid Build Coastguard Worker;
199*9880d681SAndroid Build Coastguard Worker; ABSENT:      .debug_info contents:
200*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_TAG_member
201*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_AT_name {{.*}} "a"
202*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_const_value
203*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  location
204*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_AT_name {{.*}} "const_a"
205*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_linkage_name
206*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  location
207*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_AT_name {{.*}} "b"
208*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_const_value
209*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  location
210*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_AT_name {{.*}} "const_b"
211*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_linkage_name
212*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  location
213*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_AT_name {{.*}} "c"
214*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_const_value
215*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  location
216*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_AT_name {{.*}} "const_c"
217*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_linkage_name
218*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  location
219*9880d681SAndroid Build Coastguard Worker; While we're here, a normal member does not have a linkage name, constant
220*9880d681SAndroid Build Coastguard Worker; value, or DW_AT_location.
221*9880d681SAndroid Build Coastguard Worker; ABSENT:      DW_AT_name {{.*}} "d"
222*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_linkage_name
223*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_const_value
224*9880d681SAndroid Build Coastguard Worker; ABSENT-NOT:  DW_AT_location
225*9880d681SAndroid Build Coastguard Worker; ABSENT:      NULL
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Worker; For Darwin gdb:
228*9880d681SAndroid Build Coastguard Worker; DARWINA:      .debug_info contents:
229*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_TAG_member
230*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_AT_name {{.*}} "a"
231*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_const_value
232*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  location
233*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_AT_name {{.*}} "const_a"
234*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_linkage_name
235*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  location
236*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_AT_name {{.*}} "b"
237*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_const_value
238*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  location
239*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_AT_name {{.*}} "const_b"
240*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_linkage_name
241*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  location
242*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_AT_name {{.*}} "c"
243*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_const_value
244*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  location
245*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_AT_name {{.*}} "const_c"
246*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_linkage_name
247*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  location
248*9880d681SAndroid Build Coastguard Worker; While we're here, a normal member does not have a linkage name, constant
249*9880d681SAndroid Build Coastguard Worker; value, or DW_AT_location.
250*9880d681SAndroid Build Coastguard Worker; DARWINA:      DW_AT_name {{.*}} "d"
251*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_linkage_name
252*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_const_value
253*9880d681SAndroid Build Coastguard Worker; DARWINA-NOT:  DW_AT_location
254*9880d681SAndroid Build Coastguard Worker; DARWINA:      NULL
255*9880d681SAndroid Build Coastguard Worker!34 = !{i32 1, !"Debug Info Version", i32 3}
256