llvm.org GIT mirror llvm / 254d093
DebugInfo: Lazily construct subprogram definition DIEs. A further step to correctly emitting concrete out of line definitions preceeding inlined instances of the same program. To do this, emission of subprograms must be delayed until required since we don't know which (abstract only (if there's no out of line definition), concrete only (if there are no inlined instances), or both) DIEs are required at the start of the module. To reduce the test churn in the following commit that actually fixes the bug, this commit introduces the lazy DIE construction and cleans up test cases that are impacted by the changes in the resulting DIE ordering. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209675 91177308-0d34-0410-b5e6-96231b3b80d8 David Blaikie 6 years ago
10 changed file(s) with 138 addition(s) and 125 deletion(s). Raw diff Collapse all Expand all
313313 // scope then create and insert DIEs for these variables.
314314 DIE &DwarfDebug::updateSubprogramScopeDIE(DwarfCompileUnit &SPCU,
315315 DISubprogram SP) {
316 DIE *SPDie = SPCU.getDIE(SP);
316 DIE *SPDie = SPCU.getOrCreateSubprogramDIE(SP);
317317
318318 assert(SPDie && "Unable to find subprogram DIE!");
319319
524524
525525 DISubprogram SP(Scope->getScopeNode());
526526
527 if (!ProcessedSPNodes.insert(SP))
527 DIE *&AbsDef = AbstractSPDies[SP];
528 if (AbsDef)
528529 return;
529530
530531 // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
531532 // was inlined from another compile unit.
532533 DwarfCompileUnit &SPCU = *SPMap[SP];
533 DIE *AbsDef = SPCU.getDIE(SP);
534 assert(AbsDef);
535 AbstractSPDies.insert(std::make_pair(SP, AbsDef));
534 AbsDef = SPCU.getOrCreateSubprogramDIE(SP);
535
536 if (!ProcessedSPNodes.insert(SP))
537 return;
538
536539 SPCU.addUInt(*AbsDef, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
537540 createAndAddScopeChildren(SPCU, Scope, *AbsDef);
538541 }
780783 CU.createGlobalVariableDIE(DIGlobalVariable(GVs.getElement(i)));
781784 DIArray SPs = CUNode.getSubprograms();
782785 for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
783 constructSubprogramDIE(CU, SPs.getElement(i));
786 SPMap.insert(std::make_pair(SPs.getElement(i), &CU));
784787 DIArray EnumTypes = CUNode.getEnumTypes();
785788 for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
786789 CU.getOrCreateTypeDIE(EnumTypes.getElement(i));
817820 DIArray Subprograms = TheCU.getSubprograms();
818821 for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
819822 DISubprogram SP(Subprograms.getElement(i));
820 if (DIE *D = SPCU->getDIE(SP))
821 SPCU->applySubprogramAttributes(SP, *D);
823 // Perhaps the subprogram is in another CU (such as due to comdat
824 // folding, etc), in which case ignore it here.
825 if (SPMap[SP] != SPCU)
826 continue;
827 DIE *D = SPCU->getDIE(SP);
828 if (!D)
829 // Lazily construct the subprogram if we didn't see either concrete or
830 // inlined versions during codegen.
831 D = SPCU->getOrCreateSubprogramDIE(SP);
832 SPCU->applySubprogramAttributes(SP, *D);
833 SPCU->addGlobalName(SP.getName(), *D, resolve(SP.getContext()));
822834 }
823835 }
824836 }
862874 }
863875
864876 void DwarfDebug::finalizeModuleInfo() {
877 finishSubprogramDefinitions();
878
865879 // Collect info for variables that were optimized out.
866880 collectDeadVariables();
867
868 finishSubprogramDefinitions();
869881
870882 // Handle anything that needs to be done on a per-unit basis after
871883 // all other generation.
1313 ; CHECK: [[RELEASE_DECL:0x........]]: DW_TAG_subprogram
1414 ; CHECK: [[DTOR_DECL:0x........]]: DW_TAG_subprogram
1515
16 ; CHECK: [[D2_ABS:.*]]: DW_TAG_subprogram
17 ; CHECK-NEXT: DW_AT_inline
18 ; CHECK-NEXT: DW_AT_{{.*}}linkage_name {{.*}}D2
19 ; CHECK-NEXT: DW_AT_specification {{.*}} {[[DTOR_DECL]]}
20 ; CHECK-NOT: DW_AT
21 ; CHECK: DW_TAG
22 ; CHECK: [[D1_ABS:.*]]: DW_TAG_subprogram
23 ; CHECK-NEXT: DW_AT_inline
24 ; CHECK-NEXT: DW_AT_{{.*}}linkage_name {{.*}}D1
25 ; CHECK-NEXT: DW_AT_specification {{.*}} {[[DTOR_DECL]]}
26 ; CHECK-NOT: DW_AT
27 ; CHECK: [[D1_THIS_ABS:.*]]: DW_TAG_formal_parameter
28
1629 ; CHECK: [[RELEASE:0x........]]: DW_TAG_subprogram
1730 ; CHECK: DW_AT_specification {{.*}} {[[RELEASE_DECL]]}
1831 ; CHECK: DW_TAG_formal_parameter
2639 ; CHECK-NOT: NULL
2740 ; CHECK-NOT: DW_TAG
2841 ; CHECK: DW_TAG_inlined_subroutine
29 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D1_ABS:0x........]]}
42 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D1_ABS]]}
3043 ; CHECK-NOT: NULL
3144 ; CHECK-NOT: DW_TAG
3245 ; CHECK: DW_TAG_inlined_subroutine
33 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D2_ABS:0x........]]}
34
35 ; CHECK: [[D1_ABS]]: DW_TAG_subprogram
36 ; CHECK-NEXT: DW_AT_inline
37 ; CHECK-NEXT: DW_AT_{{.*}}linkage_name
38 ; CHECK-NEXT: DW_AT_specification {{.*}} {[[DTOR_DECL]]}
39 ; CHECK-NOT: DW_AT
40 ; CHECK: [[D1_THIS_ABS:0x........]]: DW_TAG_formal_parameter
41 ; CHECK: [[D2_ABS]]: DW_TAG_subprogram
42 ; CHECK-NEXT: DW_AT_inline
43 ; CHECK-NEXT: DW_AT_{{.*}}linkage_name
44 ; CHECK-NEXT: DW_AT_specification {{.*}} {[[DTOR_DECL]]}
45 ; CHECK-NOT: DW_AT
46 ; CHECK: DW_TAG
46 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D2_ABS]]}
4747
4848 ; and then that a TAG_subprogram refers to it with AT_abstract_origin.
4949
50 ; CHECK: DW_TAG_subprogram
5150 ; CHECK: DW_TAG_subprogram
5251 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D1_ABS]]}
5352 ; CHECK: DW_TAG_formal_parameter
44 ; rdar://problem/9279956
55 ; test that the DW_AT_location of self is at ( fbreg +{{[0-9]+}}, deref, +{{[0-9]+}} )
66
7 ; CHECK: [[A:.*]]: DW_TAG_structure_type
8 ; CHECK-NEXT: DW_AT_APPLE_objc_complete_type
9 ; CHECK-NEXT: DW_AT_name{{.*}}"A"
10
11 ; CHECK: DW_TAG_subprogram
712 ; CHECK: DW_TAG_subprogram
813 ; CHECK: DW_TAG_subprogram
914 ; CHECK-NOT: DW_TAG
3136 ; 0x91 = DW_OP_fbreg
3237 ; CHECK: DW_AT_location{{.*}}91 {{[0-9]+}} 06 23 {{[0-9]+}} )
3338
34 ; CHECK: [[A:.*]]: DW_TAG_structure_type
35 ; CHECK-NEXT: DW_AT_APPLE_objc_complete_type
36 ; CHECK-NEXT: DW_AT_name{{.*}}"A"
3739 ; CHECK: [[APTR]]: DW_TAG_pointer_type
3840 ; CHECK-NEXT: {[[A]]}
3941
1212 ; return foo().func(i);
1313 ; }
1414
15 ; CHECK: DW_TAG_structure_type
16 ; CHECK: DW_TAG_subprogram
17
18 ; But make sure we emit DW_AT_object_pointer on the abstract definition.
19 ; CHECK: [[ABSTRACT_ORIGIN:.*]]: DW_TAG_subprogram
20 ; CHECK-NOT: NULL
21 ; CHECK-NOT: TAG
22 ; CHECK: DW_AT_object_pointer
23
1524 ; Ensure we omit DW_AT_object_pointer on inlined subroutines.
1625 ; CHECK: DW_TAG_inlined_subroutine
17 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}}{[[ABSTRACT_ORIGIN:0x[0-9a-e]*]]}
26 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}}{[[ABSTRACT_ORIGIN]]}
1827 ; CHECK-NOT: NULL
1928 ; CHECK-NOT: DW_AT_object_pointer
2029 ; CHECK: DW_TAG_formal_parameter
2130 ; CHECK-NOT: DW_AT_artificial
2231 ; CHECK: DW_TAG
23
24 ; But make sure we emit DW_AT_object_pointer on the abstract definition.
25 ; CHECK: [[ABSTRACT_ORIGIN]]: DW_TAG_subprogram
26 ; CHECK-NOT: NULL
27 ; CHECK-NOT: TAG
28 ; CHECK: DW_AT_object_pointer
2932
3033 %struct.foo = type { i8 }
3134
1010 ; x = f(x);
1111 ; }
1212
13 ; CHECK: DW_TAG_inlined_subroutine
14 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[F:0x.*]]}
15 ; CHECK: [[F]]: DW_TAG_subprogram
13 ; CHECK: [[F:.*]]: DW_TAG_subprogram
1614 ; CHECK-NOT: DW_TAG
1715 ; CHECK: DW_AT_name {{.*}} "f"
16
17 ; CHECK: DW_TAG_inlined_subroutine
18 ; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[F]]}
1819
1920
2021 ; Make sure the condition test is attributed to the inline function, not the
22
33 ; Based on the debuginfo-tests/sret.cpp code.
44
5 ; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xc68148e4333befda)
6 ; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0xc68148e4333befda)
5 ; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x72aabf538392d298)
6 ; CHECK: DW_AT_GNU_dwo_id [DW_FORM_data8] (0x72aabf538392d298)
77
88 %class.A = type { i32 (...)**, i32 }
99 %class.B = type { i8 }
1818 ; CHECK-NEXT: DW_AT_reference DW_FORM_flag_present
1919 ; CHECK: DW_TAG_subroutine_type DW_CHILDREN_yes
2020 ; CHECK-NEXT: DW_AT_rvalue_reference DW_FORM_flag_present
21 ;
22 ; CHECK: DW_TAG_subprogram
2321 ;
2422 ; CHECK: DW_TAG_subprogram
2523 ; CHECK-NOT: DW_TAG_subprogram
1515 ; CHECK: [[I:0x[0-9a-f]*]]:{{ *}}DW_TAG_variable
1616 ; CHECK-NEXT: DW_AT_name{{.*}}= "i"
1717 ; CHECK-NOT: NULL
18 ; CHECK: DW_TAG_subprogram
19 ; CHECK-NOT: DW_TAG
20 ; CHECK: DW_AT_MIPS_linkage_name
21 ; CHECK-NOT: DW_TAG
22 ; CHECK: DW_AT_name{{.*}}= "f1"
23 ; CHECK: [[FUNC1:0x[0-9a-f]*]]:{{ *}}DW_TAG_subprogram
24 ; CHECK-NOT: DW_TAG
25 ; CHECK: DW_AT_MIPS_linkage_name
26 ; CHECK-NOT: DW_TAG
27 ; CHECK: DW_AT_name{{.*}}= "f1"
28 ; CHECK: NULL
29 ; CHECK-NOT: NULL
3018 ; CHECK: [[FOO:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
3119 ; CHECK-NEXT: DW_AT_name{{.*}}= "foo"
3220 ; CHECK-NEXT: DW_AT_declaration
3422 ; CHECK: [[BAR:0x[0-9a-f]*]]:{{ *}}DW_TAG_structure_type
3523 ; CHECK-NEXT: DW_AT_name{{.*}}= "bar"
3624 ; CHECK: NULL
37 ; CHECK: NULL
25 ; CHECK: [[FUNC1:.*]]: DW_TAG_subprogram
26 ; CHECK-NOT: DW_TAG
27 ; CHECK: DW_AT_MIPS_linkage_name
28 ; CHECK-NOT: DW_TAG
29 ; CHECK: DW_AT_name{{.*}}= "f1"
30 ; CHECK: DW_TAG_subprogram
31 ; CHECK-NOT: DW_TAG
32 ; CHECK: DW_AT_MIPS_linkage_name
33 ; CHECK-NOT: DW_TAG
34 ; CHECK: DW_AT_name{{.*}}= "f1"
3835 ; CHECK: NULL
3936
4037 ; CHECK-NOT: NULL
4744 ; CHECK: NULL
4845 ; CHECK-NOT: NULL
4946
50 ; CHECK: DW_TAG_subprogram
51 ; CHECK-NOT: DW_TAG
52 ; CHECK: DW_AT_MIPS_linkage_name
53 ; CHECK-NOT: DW_TAG
54 ; CHECK: DW_AT_name{{.*}}= "func"
55 ; CHECK-NOT: NULL
56 ; CHECK: DW_TAG_imported_module
57 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
58 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x12)
59 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
60 ; CHECK-NOT: NULL
61 ; CHECK: DW_TAG_imported_declaration
62 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
63 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x13)
64 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FOO]]})
65 ; CHECK-NOT: NULL
66 ; CHECK: DW_TAG_imported_declaration
67 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
68 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x14)
69 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[BAR]]})
70 ; CHECK-NOT: NULL
71 ; CHECK: DW_TAG_imported_declaration
72 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
73 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x15)
74 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FUNC1]]})
75 ; CHECK-NOT: NULL
76 ; CHECK: DW_TAG_imported_declaration
77 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
78 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x16)
79 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[I]]})
80 ; CHECK-NOT: NULL
81 ; CHECK: [[X:0x[0-9a-f]*]]:{{ *}}DW_TAG_imported_declaration
82 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
83 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x18)
84 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
85 ; CHECK-NEXT: DW_AT_name{{.*}}"X"
86 ; CHECK-NOT: NULL
87 ; CHECK: DW_TAG_imported_declaration
88 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
89 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x19)
90 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[X]]})
91 ; CHECK-NEXT: DW_AT_name{{.*}}"Y"
92 ; CHECK-NOT: NULL
93 ; CHECK: DW_TAG_lexical_block
94 ; CHECK-NOT: NULL
95 ; CHECK: DW_TAG_imported_module
96 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
97 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x0f)
98 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS2]]})
99 ; CHECK: NULL
100 ; CHECK: NULL
101 ; CHECK-NOT: NULL
102
10347 ; CHECK: DW_TAG_imported_module
10448 ; Same bug as above, this should be F2, not F1
10549 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F1]])
10650 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x0b)
10751 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
52 ; CHECK-NOT: NULL
53
54 ; CHECK: DW_TAG_subprogram
55 ; CHECK-NOT: DW_TAG
56 ; CHECK: DW_AT_MIPS_linkage_name
57 ; CHECK-NOT: DW_TAG
58 ; CHECK: DW_AT_name{{.*}}= "func"
59 ; CHECK-NOT: NULL
60 ; CHECK: DW_TAG_imported_module
61 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
62 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x12)
63 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
64 ; CHECK-NOT: NULL
65 ; CHECK: DW_TAG_imported_declaration
66 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
67 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x13)
68 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FOO]]})
69 ; CHECK-NOT: NULL
70 ; CHECK: DW_TAG_imported_declaration
71 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
72 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x14)
73 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[BAR]]})
74 ; CHECK-NOT: NULL
75 ; CHECK: DW_TAG_imported_declaration
76 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
77 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x15)
78 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[FUNC1]]})
79 ; CHECK-NOT: NULL
80 ; CHECK: DW_TAG_imported_declaration
81 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
82 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x16)
83 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[I]]})
84 ; CHECK-NOT: NULL
85 ; CHECK: [[X:0x[0-9a-f]*]]:{{ *}}DW_TAG_imported_declaration
86 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
87 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x18)
88 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS1]]})
89 ; CHECK-NEXT: DW_AT_name{{.*}}"X"
90 ; CHECK-NOT: NULL
91 ; CHECK: DW_TAG_imported_declaration
92 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
93 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x19)
94 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[X]]})
95 ; CHECK-NEXT: DW_AT_name{{.*}}"Y"
96 ; CHECK-NOT: NULL
97 ; CHECK: DW_TAG_lexical_block
98 ; CHECK-NOT: NULL
99 ; CHECK: DW_TAG_imported_module
100 ; CHECK-NEXT: DW_AT_decl_file{{.*}}(0x0[[F2]])
101 ; CHECK-NEXT: DW_AT_decl_line{{.*}}(0x0f)
102 ; CHECK-NEXT: DW_AT_import{{.*}}=> {[[NS2]]})
103 ; CHECK: NULL
104 ; CHECK: NULL
105 ; CHECK: NULL
108106
109107 ; CHECK: file_names[ [[F1]]]{{.*}}debug-info-namespace.cpp
110108 ; CHECK: file_names[ [[F2]]]{{.*}}foo.cpp
1212 ;
1313 ; CHECK: DW_TAG_subprogram
1414 ; CHECK-NOT: DW_TAG
15 ; CHECK: DW_AT_name {{.*}} "a"
16 ; CHECK-NOT: DW_TAG
17 ; CHECK: DW_TAG_formal_parameter
18 ; CHECK-NOT: DW_TAG
19 ; CHECK: DW_TAG_formal_parameter
20 ; CHECK-NOT: DW_TAG
21 ; CHECK: DW_TAG_unspecified_parameters
22 ;
23 ; CHECK: DW_TAG_subprogram
24 ; CHECK-NOT: DW_TAG
1525 ; CHECK: DW_AT_name {{.*}} "b"
1626 ; CHECK-NOT: DW_TAG
1727 ; CHECK: DW_TAG_formal_parameter
2030 ;
2131 ; Variadic C++ member function.
2232 ; struct A { void a(int c, ...); }
23 ;
24 ; CHECK: DW_TAG_subprogram
25 ; CHECK-NOT: DW_TAG
26 ; CHECK: DW_AT_name {{.*}} "a"
27 ; CHECK-NOT: DW_TAG
28 ; CHECK: DW_TAG_formal_parameter
29 ; CHECK-NOT: DW_TAG
30 ; CHECK: DW_TAG_formal_parameter
31 ; CHECK-NOT: DW_TAG
32 ; CHECK: DW_TAG_unspecified_parameters
3333 ;
3434 ; Variadic function pointer.
3535 ; void (*fptr)(int, ...);
2121 ; return A().getFoo();
2222 ; }
2323 ;
24 ; CHECK: DW_TAG_subprogram
25 ; CHECK-NOT: DW_TAG
26 ; CHECK: DW_AT_MIPS_linkage_name {{.*}} "_Z3bazv"
27 ; CHECK: DW_TAG_subprogram
28 ; CHECK-NOT: DW_TAG
29 ; CHECK: DW_AT_MIPS_linkage_name {{.*}} "_ZL3barv"
3024 ; CHECK: DW_TAG_class_type
3125 ; CHECK-NEXT: DW_AT_name {{.*}} "A"
3226 ; CHECK-NOT: DW_TAG
3832 ; CHECK: DW_AT_MIPS_linkage_name {{.*}} "_ZN1A6getFooEv"
3933 ; CHECK-NOT: DW_TAG
4034 ; CHECK: DW_AT_name {{.*}} "getFoo"
35 ; CHECK: DW_TAG_subprogram
36 ; CHECK-NOT: DW_TAG
37 ; CHECK: DW_AT_MIPS_linkage_name {{.*}} "_Z3bazv"
38 ; CHECK: DW_TAG_subprogram
39 ; CHECK-NOT: DW_TAG
40 ; CHECK: DW_AT_MIPS_linkage_name {{.*}} "_ZL3barv"
4141
4242 ; getFoo and A may only appear once.
4343 ; CHECK-NOT: {{(getFoo)|("A")}}