diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -1105,9 +1105,10 @@ // shouldn't be found by lookup. AbsDef = &ContextCU->createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, nullptr); ContextCU->applySubprogramAttributesToDefinition(SP, *AbsDef); - - if (!ContextCU->includeMinimalInlineScopes()) - ContextCU->addUInt(*AbsDef, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined); + ContextCU->addSInt(*AbsDef, dwarf::DW_AT_inline, + DD->getDwarfVersion() <= 4 ? Optional() + : dwarf::DW_FORM_implicit_const, + dwarf::DW_INL_inlined); if (DIE *ObjectPointer = ContextCU->createAndAddScopeChildren(Scope, *AbsDef)) ContextCU->addDIEEntry(*AbsDef, dwarf::DW_AT_object_pointer, *ObjectPointer); } diff --git a/llvm/test/DebugInfo/Inputs/gmlt.ll b/llvm/test/DebugInfo/Inputs/gmlt.ll --- a/llvm/test/DebugInfo/Inputs/gmlt.ll +++ b/llvm/test/DebugInfo/Inputs/gmlt.ll @@ -42,12 +42,7 @@ ; CHECK: DW_TAG_subprogram ; CHECK-NEXT: DW_AT_name {{.*}} "f3" - -; FIXME: We don't really need DW_AT_inline, consumers can ignore this due to -; the absence of high_pc/low_pc/ranges and know that they just need it for -; retrieving the name of a concrete inlined instance - -; CHECK-NOT: {{DW_TAG|DW_AT|NULL}} +; CHECK-NEXT: DW_AT_inline ; Check that we only provide the minimal attributes on a subprogram to save space. ; CHECK: DW_TAG_subprogram diff --git a/llvm/test/DebugInfo/X86/fission-inline.ll b/llvm/test/DebugInfo/X86/fission-inline.ll --- a/llvm/test/DebugInfo/X86/fission-inline.ll +++ b/llvm/test/DebugInfo/X86/fission-inline.ll @@ -58,7 +58,7 @@ ; CHECK: DW_TAG_subprogram ; CHECK-NEXT: DW_AT_name {{.*}} "f2" -; CHECK-NOT: DW_ +; CHECK-NEXT: DW_AT_inline ; CHECK: DW_TAG_subprogram ; CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] ; CHECK-NEXT: DW_AT_high_pc