From b5b5453e61eea571af77b92b317a25da1ee0b116 Mon Sep 17 00:00:00 2001 From: Manman Ren Date: Tue, 28 May 2013 19:01:58 +0000 Subject: LTO+Debug Info: correctly emit inlined_subroutine when the inlined callee is from a different CU. We used to print out an error message and fail to generate inlined_subroutine. If we use ref_addr in the generated DWARF, the DWARF version should be 3 or above. rdar://13926659 llvm-svn: 182791 --- llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp') diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp index 90ca034c976..adee01bc830 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp @@ -1504,9 +1504,14 @@ DIE *CompileUnit::constructVariableDIE(DbgVariable *DV, bool isScopeAbstract) { DIE *VariableDie = new DIE(Tag); DbgVariable *AbsVar = DV->getAbstractVariable(); DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL; - if (AbsDIE) + if (AbsDIE) { + bool InSameCU = AbsDIE->getCompileUnit() == getCUDie(); addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin, - dwarf::DW_FORM_ref4, AbsDIE); + InSameCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr, + AbsDIE); + if (!InSameCU) + DD->setUseRefAddr(true); + } else { addString(VariableDie, dwarf::DW_AT_name, Name); addSourceLine(VariableDie, DV->getVariable()); -- cgit v1.2.3