summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
diff options
context:
space:
mode:
authorManman Ren <mren@apple.com>2013-05-28 19:01:58 +0000
committerManman Ren <mren@apple.com>2013-05-28 19:01:58 +0000
commitb5b5453e61eea571af77b92b317a25da1ee0b116 (patch)
tree021e9cab0b6fdf9aa464a03d912083c5b3159927 /llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
parentcceafb2d6d3de2101d5f6adf9b04acce795efc4d (diff)
downloadbcm5719-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.cpp9
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());
OpenPOWER on IntegriCloud