diff options
| author | Eugene Leviant <eleviant@accesssoftek.com> | 2019-02-27 14:46:59 +0000 |
|---|---|---|
| committer | Eugene Leviant <eleviant@accesssoftek.com> | 2019-02-27 14:46:59 +0000 |
| commit | 7f78d4712f91d034e1850d0a0030a090fbe14999 (patch) | |
| tree | 59f72eb90152750f4ce66eef406d82092550f62f /llvm/lib/CodeGen/AsmPrinter | |
| parent | d73a67a799a116857b4e316814c6e8ee5c7b13a6 (diff) | |
| download | bcm5719-llvm-7f78d4712f91d034e1850d0a0030a090fbe14999.tar.gz bcm5719-llvm-7f78d4712f91d034e1850d0a0030a090fbe14999.zip | |
[DebugInfo] Apply subprogram attributes on behalf of owner CU
When using full LTO it is possible that template function definition DIE
is bound to one compilation unit and it's declaration to another. We should
add function declaration attributes on behalf of its owner CU otherwise
we may end up with malformed file identifier in function declaration
DW_AT_decl_file attribute.
Differential revision: https://reviews.llvm.org/D58538
llvm-svn: 354978
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DIE.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DIE.cpp b/llvm/lib/CodeGen/AsmPrinter/DIE.cpp index a07b5477303..dfc4156243d 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DIE.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DIE.cpp @@ -211,7 +211,7 @@ const DIE *DIE::getUnitDie() const { return nullptr; } -const DIEUnit *DIE::getUnit() const { +DIEUnit *DIE::getUnit() const { const DIE *UnitDie = getUnitDie(); if (UnitDie) return UnitDie->Owner.dyn_cast<DIEUnit*>(); diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 8534bd12ba2..d0a779c57b8 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1106,7 +1106,8 @@ DIE *DwarfUnit::getOrCreateSubprogramDIE(const DISubprogram *SP, bool Minimal) { if (SP->isDefinition()) return &SPDie; - applySubprogramAttributes(SP, SPDie); + static_cast<DwarfUnit *>(SPDie.getUnit()) + ->applySubprogramAttributes(SP, SPDie); return &SPDie; } |

