[llvm] r289697 - DebugInfo: Improve type safety and simplify some subprogram finalization code

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 15 12:25:17 PST 2016


> On Dec 14, 2016, at 11:38 AM, David Blaikie via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: dblaikie
> Date: Wed Dec 14 13:38:39 2016
> New Revision: 289697
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=289697&view=rev
> Log:
> DebugInfo: Improve type safety and simplify some subprogram finalization code
> 
> This probably ended up this way aften the subprogram<>function link
> inversion and debug info metadata schema changes.
> 
> Modified:
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=289697&r1=289696&r2=289697&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Dec 14 13:38:39 2016
> @@ -364,13 +364,13 @@ void DwarfDebug::constructAbstractSubpro
>   assert(Scope->isAbstractScope());
>   assert(!Scope->getInlinedAt());
> 
> -  const MDNode *SP = Scope->getScopeNode();
> +  auto *SP = cast<DISubprogram>(Scope->getScopeNode());
> 
>   ProcessedSPNodes.insert(SP);
> 
>   // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
>   // was inlined from another compile unit.
> -  auto &CU = *CUMap.lookup(cast<DISubprogram>(SP)->getUnit());
> +  auto &CU = *CUMap.lookup(SP->getUnit());
>   forBothCUs(CU, [&](DwarfCompileUnit &CU) {
>     CU.constructAbstractSubprogramScopeDIE(Scope);
>   });
> @@ -535,13 +535,11 @@ void DwarfDebug::finishVariableDefinitio
> }
> 
> void DwarfDebug::finishSubprogramDefinitions() {
> -  for (auto &F : MMI->getModule()->functions())
> -    if (auto *SP = F.getSubprogram())
> -      if (ProcessedSPNodes.count(SP) &&
> -          SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug)
> -        forBothCUs(*CUMap.lookup(SP->getUnit()), [&](DwarfCompileUnit &CU) {
> -          CU.finishSubprogramDefinition(SP);
> -        });
> +  for (const DISubprogram *SP : ProcessedSPNodes)

I was just tracking down a failing buildbot and then realized that it is probably this commit that makes the output nondeterministic. You are iterating over a SmallPtrSet<const MDNode *, 16> here. I think this only triggers when the set is non-small, but this should be fixed nonetheless.

-- adrian

> +    if (SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug)
> +      forBothCUs(*CUMap.lookup(SP->getUnit()), [&](DwarfCompileUnit &CU) {
> +        CU.finishSubprogramDefinition(SP);
> +      });
> }
> 
> void DwarfDebug::finalizeModuleInfo() {
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=289697&r1=289696&r2=289697&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Wed Dec 14 13:38:39 2016
> @@ -216,7 +216,7 @@ class DwarfDebug : public DebugHandlerBa
> 
>   /// This is a collection of subprogram MDNodes that are processed to
>   /// create DIEs.
> -  SmallPtrSet<const MDNode *, 16> ProcessedSPNodes;
> +  SmallPtrSet<const DISubprogram *, 16> ProcessedSPNodes;
> 
>   /// If nonnull, stores the current machine function we're processing.
>   const MachineFunction *CurFn;
> @@ -553,7 +553,7 @@ public:
> 
>   // FIXME: Sink these functions down into DwarfFile/Dwarf*Unit.
> 
> -  SmallPtrSet<const MDNode *, 16> &getProcessedSPNodes() {
> +  SmallPtrSet<const DISubprogram *, 16> &getProcessedSPNodes() {
>     return ProcessedSPNodes;
>   }
> };
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list