[llvm] r192749 - Make sure we're not attempting to construct a subprogram DIE
Eric Christopher
echristo at gmail.com
Thu Oct 17 19:02:23 PDT 2013
For the record I've reverted this here in r192938 as it causes some
problems with function definitions in multiple TUs/CUs being
constructed twice. The resultant debug info isn't very good, but at
least isn't crashing the compiler for now. I'll need to think about a
solution for that.
-eric
On Tue, Oct 15, 2013 at 4:31 PM, Eric Christopher <echristo at gmail.com> wrote:
> Author: echristo
> Date: Tue Oct 15 18:31:38 2013
> New Revision: 192749
>
> URL: http://llvm.org/viewvc/llvm-project?rev=192749&view=rev
> Log:
> Make sure we're not attempting to construct a subprogram DIE
> twice and just look up the value. Fix the one case where
> we were trying to create a subprogram DIE and we should already
> have had one. Reflow formatting in collectDeadVariables while fixing.
>
> Modified:
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=192749&r1=192748&r2=192749&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Oct 15 18:31:38 2013
> @@ -826,12 +826,8 @@ CompileUnit *DwarfDebug::constructCompil
> }
>
> // Construct subprogram DIE.
> -void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
> - const MDNode *N) {
> - CompileUnit *&CURef = SPMap[N];
> - if (CURef)
> - return;
> - CURef = TheCU;
> +void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU, const MDNode *N) {
> + assert(!SPMap[N] && "Trying to create a subprogram DIE twice!");
>
> DISubprogram SP(N);
> if (!SP.isDefinition())
> @@ -840,6 +836,7 @@ void DwarfDebug::constructSubprogramDIE(
> return;
>
> DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
> + SPMap[N] = TheCU;
>
> // Expose as a global name.
> TheCU->addGlobalName(SP.getName(), SubprogramDie);
> @@ -974,28 +971,33 @@ void DwarfDebug::collectDeadVariables()
> DIArray Subprograms = TheCU.getSubprograms();
> for (unsigned i = 0, e = Subprograms.getNumElements(); i != e; ++i) {
> DISubprogram SP(Subprograms.getElement(i));
> - if (ProcessedSPNodes.count(SP) != 0) continue;
> - if (!SP.isSubprogram()) continue;
> - if (!SP.isDefinition()) continue;
> + if (ProcessedSPNodes.count(SP) != 0)
> + continue;
> + if (!SP.isSubprogram())
> + continue;
> + if (!SP.isDefinition())
> + continue;
> DIArray Variables = SP.getVariables();
> - if (Variables.getNumElements() == 0) continue;
> + if (Variables.getNumElements() == 0)
> + continue;
>
> LexicalScope *Scope =
> - new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
> + new LexicalScope(NULL, DIDescriptor(SP), NULL, false);
> DeadFnScopeMap[SP] = Scope;
>
> // Construct subprogram DIE and add variables DIEs.
> CompileUnit *SPCU = CUMap.lookup(TheCU);
> assert(SPCU && "Unable to find Compile Unit!");
> - constructSubprogramDIE(SPCU, SP);
> - DIE *ScopeDIE = SPCU->getDIE(SP);
> + DIE *SPDIE = SPCU->getDIE(SP);
> + assert(SPDIE && "Subprogram wasn't created?");
> for (unsigned vi = 0, ve = Variables.getNumElements(); vi != ve; ++vi) {
> DIVariable DV(Variables.getElement(vi));
> - if (!DV.isVariable()) continue;
> + if (!DV.isVariable())
> + continue;
> DbgVariable NewVar(DV, NULL, this);
> if (DIE *VariableDIE =
> - SPCU->constructVariableDIE(&NewVar, Scope->isAbstractScope()))
> - ScopeDIE->addChild(VariableDIE);
> + SPCU->constructVariableDIE(&NewVar, Scope->isAbstractScope()))
> + SPDIE->addChild(VariableDIE);
> }
> }
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list