diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 41232052567..d26c3d86863 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -597,7 +597,7 @@ std::unique_ptr DwarfDebug::constructScopeDIE(DwarfCompileUnit &TheCU, // avoid creating un-used children then removing them later when we find out // the scope DIE is null. std::unique_ptr ScopeDIE; - if (DS.getContext() && DS.isSubprogram()) { + if (Scope->getParent() && DS.isSubprogram()) { ScopeDIE = constructInlinedScopeDIE(TheCU, Scope); if (!ScopeDIE) return nullptr; diff --git a/test/DebugInfo/X86/concrete_out_of_line.ll b/test/DebugInfo/X86/concrete_out_of_line.ll index 3511f28ddef..63607e5a3a7 100644 --- a/test/DebugInfo/X86/concrete_out_of_line.ll +++ b/test/DebugInfo/X86/concrete_out_of_line.ll @@ -7,23 +7,52 @@ ; first check that we have a TAG_subprogram at a given offset and it has ; AT_inline. -; CHECK: DW_TAG_class_type ; CHECK: DW_TAG_class_type ; CHECK: DW_TAG_subprogram +; CHECK: [[ASSIGN_DECL:0x........]]: DW_TAG_subprogram + +; CHECK: [[RELEASE:0x........]]: DW_TAG_subprogram +; CHECK-NEXT: DW_AT_specification {{.*}} {[[RELEASE_DECL:0x........]]} +; CHECK: DW_TAG_formal_parameter +; CHECK-NOT: NULL +; CHECK-NOT: DW_TAG +; CHECK: DW_TAG_lexical_block +; CHECK-NOT: NULL +; CHECK-NOT: DW_TAG +; CHECK: DW_TAG_inlined_subroutine +; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[ASSIGN:0x........]]} +; CHECK-NOT: NULL +; CHECK-NOT: DW_TAG +; CHECK: DW_TAG_inlined_subroutine +; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D1_ABS:0x........]]} +; CHECK-NOT: NULL +; CHECK-NOT: DW_TAG +; CHECK: DW_TAG_inlined_subroutine +; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D2_ABS:0x........]]} + +; CHECK: DW_TAG_class_type +; CHECK: [[RELEASE_DECL]]: DW_TAG_subprogram ; CHECK: [[DTOR_DECL:0x........]]: DW_TAG_subprogram -; CHECK: [[DTOR_OOL:0x........]]: DW_TAG_subprogram -; CHECK-NEXT: DW_AT_specification {{.*}} {[[DTOR_DECL]]}) + +; CHECK: [[D1_ABS]]: DW_TAG_subprogram +; CHECK-NEXT: DW_AT_specification {{.*}} {[[DTOR_DECL]]} +; CHECK-NEXT: DW_AT_{{.*}}linkage_name +; CHECK-NEXT: DW_AT_inline +; CHECK: [[D2_ABS]]: DW_TAG_subprogram +; CHECK-NEXT: DW_AT_specification {{.*}} {[[DTOR_DECL]]} ; CHECK-NEXT: DW_AT_{{.*}}linkage_name ; CHECK-NEXT: DW_AT_inline - ; and then that a TAG_subprogram refers to it with AT_abstract_origin. ; CHECK: DW_TAG_subprogram ; CHECK: DW_TAG_subprogram -; CHECK: DW_TAG_subprogram -; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[DTOR_OOL]]}) +; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D1_ABS]]} +; CHECK: DW_TAG_formal_parameter +; CHECK: DW_TAG_inlined_subroutine +; CHECK-NEXT: DW_AT_abstract_origin {{.*}} {[[D2_ABS]]} + define i32 @_ZN17nsAutoRefCnt7ReleaseEv() { entry: