From 1c165b8ee38c4d960bb4cdd86bc54df144cf5e84 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Fri, 18 Oct 2013 01:57:30 +0000 Subject: [PATCH] Temporarily revert r192749 as it is causing problems for LTO and requires a more in depth change to the IR structure. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192938 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 2e5205205d0..755f27867ec 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -827,7 +827,14 @@ CompileUnit *DwarfDebug::constructCompileUnit(const MDNode *N) { // Construct subprogram DIE. void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU, const MDNode *N) { - assert(!SPMap[N] && "Trying to create a subprogram DIE twice!"); + // FIXME: We should only call this routine once, however, during LTO if a + // program is defined in multiple CUs we could end up calling it out of + // beginModule as we walk the CUs. + + CompileUnit *&CURef = SPMap[N]; + if (CURef) + return; + CURef = TheCU; DISubprogram SP(N); if (!SP.isDefinition()) @@ -836,7 +843,6 @@ void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU, const MDNode *N) { return; DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP); - SPMap[N] = TheCU; // Expose as a global name. TheCU->addGlobalName(SP.getName(), SubprogramDie, resolve(SP.getContext()));