diff options
author | Manman Ren <mren@apple.com> | 2013-05-28 19:01:58 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2013-05-28 19:01:58 +0000 |
commit | b5b5453e61eea571af77b92b317a25da1ee0b116 (patch) | |
tree | 021e9cab0b6fdf9aa464a03d912083c5b3159927 /llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | |
parent | cceafb2d6d3de2101d5f6adf9b04acce795efc4d (diff) | |
download | bcm5719-llvm-b5b5453e61eea571af77b92b317a25da1ee0b116.tar.gz bcm5719-llvm-b5b5453e61eea571af77b92b317a25da1ee0b116.zip |
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
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
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()); |