<div dir="ltr">r289892<br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 15, 2016 at 12:25 PM Adrian Prantl <<a href="mailto:aprantl@apple.com">aprantl@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br class="gmail_msg">
> On Dec 14, 2016, at 11:38 AM, David Blaikie via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br class="gmail_msg">
><br class="gmail_msg">
> Author: dblaikie<br class="gmail_msg">
> Date: Wed Dec 14 13:38:39 2016<br class="gmail_msg">
> New Revision: 289697<br class="gmail_msg">
><br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=289697&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=289697&view=rev</a><br class="gmail_msg">
> Log:<br class="gmail_msg">
> DebugInfo: Improve type safety and simplify some subprogram finalization code<br class="gmail_msg">
><br class="gmail_msg">
> This probably ended up this way aften the subprogram<>function link<br class="gmail_msg">
> inversion and debug info metadata schema changes.<br class="gmail_msg">
><br class="gmail_msg">
> Modified:<br class="gmail_msg">
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br class="gmail_msg">
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=289697&r1=289696&r2=289697&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=289697&r1=289696&r2=289697&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)<br class="gmail_msg">
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Dec 14 13:38:39 2016<br class="gmail_msg">
> @@ -364,13 +364,13 @@ void DwarfDebug::constructAbstractSubpro<br class="gmail_msg">
>   assert(Scope->isAbstractScope());<br class="gmail_msg">
>   assert(!Scope->getInlinedAt());<br class="gmail_msg">
><br class="gmail_msg">
> -  const MDNode *SP = Scope->getScopeNode();<br class="gmail_msg">
> +  auto *SP = cast<DISubprogram>(Scope->getScopeNode());<br class="gmail_msg">
><br class="gmail_msg">
>   ProcessedSPNodes.insert(SP);<br class="gmail_msg">
><br class="gmail_msg">
>   // Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram<br class="gmail_msg">
>   // was inlined from another compile unit.<br class="gmail_msg">
> -  auto &CU = *CUMap.lookup(cast<DISubprogram>(SP)->getUnit());<br class="gmail_msg">
> +  auto &CU = *CUMap.lookup(SP->getUnit());<br class="gmail_msg">
>   forBothCUs(CU, [&](DwarfCompileUnit &CU) {<br class="gmail_msg">
>     CU.constructAbstractSubprogramScopeDIE(Scope);<br class="gmail_msg">
>   });<br class="gmail_msg">
> @@ -535,13 +535,11 @@ void DwarfDebug::finishVariableDefinitio<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> void DwarfDebug::finishSubprogramDefinitions() {<br class="gmail_msg">
> -  for (auto &F : MMI->getModule()->functions())<br class="gmail_msg">
> -    if (auto *SP = F.getSubprogram())<br class="gmail_msg">
> -      if (ProcessedSPNodes.count(SP) &&<br class="gmail_msg">
> -          SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug)<br class="gmail_msg">
> -        forBothCUs(*CUMap.lookup(SP->getUnit()), [&](DwarfCompileUnit &CU) {<br class="gmail_msg">
> -          CU.finishSubprogramDefinition(SP);<br class="gmail_msg">
> -        });<br class="gmail_msg">
> +  for (const DISubprogram *SP : ProcessedSPNodes)<br class="gmail_msg">
<br class="gmail_msg">
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.<br class="gmail_msg">
<br class="gmail_msg">
-- adrian<br class="gmail_msg">
<br class="gmail_msg">
> +    if (SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug)<br class="gmail_msg">
> +      forBothCUs(*CUMap.lookup(SP->getUnit()), [&](DwarfCompileUnit &CU) {<br class="gmail_msg">
> +        CU.finishSubprogramDefinition(SP);<br class="gmail_msg">
> +      });<br class="gmail_msg">
> }<br class="gmail_msg">
><br class="gmail_msg">
> void DwarfDebug::finalizeModuleInfo() {<br class="gmail_msg">
><br class="gmail_msg">
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h<br class="gmail_msg">
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=289697&r1=289696&r2=289697&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=289697&r1=289696&r2=289697&view=diff</a><br class="gmail_msg">
> ==============================================================================<br class="gmail_msg">
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)<br class="gmail_msg">
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Wed Dec 14 13:38:39 2016<br class="gmail_msg">
> @@ -216,7 +216,7 @@ class DwarfDebug : public DebugHandlerBa<br class="gmail_msg">
><br class="gmail_msg">
>   /// This is a collection of subprogram MDNodes that are processed to<br class="gmail_msg">
>   /// create DIEs.<br class="gmail_msg">
> -  SmallPtrSet<const MDNode *, 16> ProcessedSPNodes;<br class="gmail_msg">
> +  SmallPtrSet<const DISubprogram *, 16> ProcessedSPNodes;<br class="gmail_msg">
><br class="gmail_msg">
>   /// If nonnull, stores the current machine function we're processing.<br class="gmail_msg">
>   const MachineFunction *CurFn;<br class="gmail_msg">
> @@ -553,7 +553,7 @@ public:<br class="gmail_msg">
><br class="gmail_msg">
>   // FIXME: Sink these functions down into DwarfFile/Dwarf*Unit.<br class="gmail_msg">
><br class="gmail_msg">
> -  SmallPtrSet<const MDNode *, 16> &getProcessedSPNodes() {<br class="gmail_msg">
> +  SmallPtrSet<const DISubprogram *, 16> &getProcessedSPNodes() {<br class="gmail_msg">
>     return ProcessedSPNodes;<br class="gmail_msg">
>   }<br class="gmail_msg">
> };<br class="gmail_msg">
><br class="gmail_msg">
><br class="gmail_msg">
> _______________________________________________<br class="gmail_msg">
> llvm-commits mailing list<br class="gmail_msg">
> <a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>