[llvm] r192749 - Make sure we're not attempting to construct a subprogram DIE
Eric Christopher
echristo at gmail.com
Mon May 26 00:07:00 PDT 2014
Cool, thanks!
-eric
On Mon, May 26, 2014 at 12:00 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Added test coverage for this issue in r209614.
>
> On Thu, Oct 17, 2013 at 7:02 PM, Eric Christopher <echristo at gmail.com> wrote:
>> 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
>> _______________________________________________
>> 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