|
66 | 66 |
|
67 | 67 | ; ASM: .section .debug_gnu_pubnames
|
68 | 68 | ; ASM: .byte 32 # Attributes: VARIABLE, EXTERNAL
|
| 69 | +; ASM-NEXT: .asciz "ns::global_namespace_variable" # External Name |
| 70 | +; ASM: .byte 32 # Attributes: VARIABLE, EXTERNAL |
69 | 71 | ; ASM-NEXT: .asciz "global_variable" # External Name
|
70 | 72 |
|
71 | 73 | ; ASM: .section .debug_gnu_pubtypes
|
|
123 | 125 | ; CHECK: DW_AT_name ("global_namespace_function")
|
124 | 126 | ; CHECK: NULL
|
125 | 127 |
|
126 |
| -; CHECK: DW_TAG_subprogram |
| 128 | +; CHECK: [[F3:0x[0-9a-f]+]]: DW_TAG_subprogram |
127 | 129 | ; CHECK: DW_AT_name ("f3")
|
128 | 130 | ; CHECK: [[F3_Z:.*]]: DW_TAG_variable
|
129 | 131 | ; CHECK: DW_AT_name ("z")
|
|
184 | 186 | ; CHECK: DW_AT_linkage_name
|
185 | 187 | ; CHECK: DW_AT_name ("global_function")
|
186 | 188 |
|
187 |
| -; CHECK: DW_TAG_subprogram |
| 189 | +; CHECK: [[GLOBAL_F7:0x[0-9a-f]+]]: DW_TAG_subprogram |
| 190 | +; CHECK: DW_AT_linkage_name |
| 191 | +; CHECK: DW_AT_name ("f7") |
| 192 | + |
188 | 193 | ; CHECK: DW_TAG_pointer_type
|
189 | 194 | ; CHECK: DW_TAG_pointer_type
|
190 | 195 | ; CHECK: NULL
|
191 | 196 |
|
192 | 197 | ; CHECK-LABEL: .debug_gnu_pubnames contents:
|
193 | 198 | ; CHECK-NEXT: length = {{.*}}, version = 0x0002, unit_offset = 0x00000000, unit_size = {{.*}}
|
194 | 199 | ; CHECK-NEXT: Offset Linkage Kind Name
|
| 200 | +; CHECK-NEXT: [[ANON_INNER_B]] STATIC VARIABLE "(anonymous namespace)::inner::b" |
| 201 | +; CHECK-NEXT: [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function" |
| 202 | +; CHECK-NEXT: [[OUTER]] EXTERNAL TYPE "outer" |
| 203 | +; CHECK-NEXT: [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable" |
| 204 | +; CHECK-NEXT: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable" |
| 205 | +; CHECK-NEXT: [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "unnamed_enum_enumerator" |
| 206 | +; CHECK-NEXT: [[GLOBAL_F7]] EXTERNAL FUNCTION "f7" |
| 207 | +; CHECK-NEXT: [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)" |
| 208 | +; FIXME: GCC produces enumerators as EXTERNAL, not STATIC |
| 209 | +; CHECK-NEXT: [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE "named_enum_class_enumerator" |
195 | 210 | ; CHECK-NEXT: [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function"
|
| 211 | +; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function" |
196 | 212 | ; CHECK-NEXT: [[NS]] EXTERNAL TYPE "ns"
|
| 213 | +; CHECK-NEXT: [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "named_enum_enumerator" |
| 214 | +; CHECK-NEXT: [[ANON]] EXTERNAL TYPE "(anonymous namespace)" |
197 | 215 | ; CHECK-NEXT: [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c"
|
| 216 | +; CHECK-NEXT: [[D_VAR]] EXTERNAL VARIABLE "ns::d" |
| 217 | +; CHECK-NEXT: [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function" |
| 218 | +; CHECK-NEXT: [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable" |
198 | 219 | ; CHECK-NEXT: [[ANON_I]] STATIC VARIABLE "(anonymous namespace)::i"
|
199 |
| -; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function" |
| 220 | +; CHECK-NEXT: [[ANON_INNER]] EXTERNAL TYPE "(anonymous namespace)::inner" |
| 221 | +; CHECK-NEXT: [[F3]] EXTERNAL FUNCTION "f3" |
200 | 222 | ; GCC Doesn't put local statics in pubnames, but it seems not unreasonable and
|
201 | 223 | ; comes out naturally from LLVM's implementation, so I'm OK with it for now. If
|
202 | 224 | ; it's demonstrated that this is a major size concern or degrades debug info
|
203 | 225 | ; consumer behavior, feel free to change it.
|
204 | 226 | ; CHECK-NEXT: [[F3_Z]] STATIC VARIABLE "f3::z"
|
205 |
| -; CHECK-NEXT: [[ANON]] EXTERNAL TYPE "(anonymous namespace)" |
206 |
| -; CHECK-NEXT: [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)" |
207 |
| -; CHECK-NEXT: [[ANON_INNER_B]] STATIC VARIABLE "(anonymous namespace)::inner::b" |
208 |
| -; CHECK-NEXT: [[OUTER]] EXTERNAL TYPE "outer" |
209 |
| -; FIXME: GCC produces enumerators as EXTERNAL, not STATIC |
210 |
| -; CHECK-NEXT: [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE "named_enum_class_enumerator" |
211 |
| -; CHECK-NEXT: [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function" |
212 |
| -; CHECK-NEXT: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable" |
213 |
| -; CHECK-NEXT: [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable" |
214 |
| -; CHECK-NEXT: [[ANON_INNER]] EXTERNAL TYPE "(anonymous namespace)::inner" |
215 |
| -; CHECK-NEXT: [[D_VAR]] EXTERNAL VARIABLE "ns::d" |
216 |
| -; CHECK-NEXT: [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "named_enum_enumerator" |
217 |
| -; CHECK-NEXT: [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable" |
218 |
| -; CHECK-NEXT: [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function" |
219 |
| -; CHECK-NEXT: [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "unnamed_enum_enumerator" |
220 | 227 |
|
221 | 228 | ; CHECK-LABEL: debug_gnu_pubtypes contents:
|
222 | 229 | ; CHECK: Offset Linkage Kind Name
|
| 230 | +; CHECK-NEXT: [[INT]] STATIC TYPE "int" |
223 | 231 | ; CHECK-NEXT: [[C]] EXTERNAL TYPE "C"
|
224 | 232 | ; CHECK-NEXT: [[UNSIGNED_INT]] STATIC TYPE "unsigned int"
|
225 |
| -; CHECK-NEXT: [[D]] EXTERNAL TYPE "ns::D" |
226 | 233 | ; CHECK-NEXT: [[NAMED_ENUM]] EXTERNAL TYPE "named_enum"
|
227 |
| -; CHECK-NEXT: [[INT]] STATIC TYPE "int" |
228 | 234 | ; CHECK-NEXT: [[NAMED_ENUM_CLASS]] EXTERNAL TYPE "named_enum_class"
|
| 235 | +; CHECK-NEXT: [[D]] EXTERNAL TYPE "ns::D" |
229 | 236 |
|
230 | 237 | %struct.C = type { i8 }
|
231 | 238 | %"struct.ns::D" = type { i32 }
|
|
0 commit comments