[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