It's deterministic. If the MachOStreamer for the target is constructed with LabelSections=true, then calling InitSections early leads to a temporary symbol (ltmp0) being output before the MCContext is initialized. Initializing the MCContext resets the temporary ID counter to zero, which led to a second ltmp0 symbol being output later.<div>
<br></div><div>All in-tree code constructs MachOStreamer with LabelSections=false, so no test case I'm afraid.</div><div><br></div><div>- Lang.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Dec 11, 2012 at 9:13 AM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The bug was  hard to trigger bu deterministic, no? Do you have a testcase?<br>
<div class="HOEnZb"><div class="h5"><br>
On 10 December 2012 17:49, Lang Hames <<a href="mailto:lhames@gmail.com">lhames@gmail.com</a>> wrote:<br>
> Author: lhames<br>
> Date: Mon Dec 10 16:49:11 2012<br>
> New Revision: 169785<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=169785&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=169785&view=rev</a><br>
> Log:<br>
> Defer call to InitSections until after MCContext has been initialized. If<br>
> InitSections is called before the MCContext is initialized it could cause<br>
> duplicate temporary symbols to be emitted later (after context initialization<br>
> resets the temporary label counter).<br>
><br>
> Modified:<br>
>     llvm/trunk/include/llvm/MC/MCStreamer.h<br>
>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
>     llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp<br>
>     llvm/trunk/lib/MC/MCStreamer.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/MC/MCStreamer.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=169785&r1=169784&r2=169785&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=169785&r1=169784&r2=169785&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/include/llvm/MC/MCStreamer.h (original)<br>
> +++ llvm/trunk/include/llvm/MC/MCStreamer.h Mon Dec 10 16:49:11 2012<br>
> @@ -70,6 +70,8 @@<br>
>      SmallVector<std::pair<const MCSection *,<br>
>                  const MCSection *>, 4> SectionStack;<br>
><br>
> +    bool AutoInitSections;<br>
> +<br>
>    protected:<br>
>      MCStreamer(MCContext &Ctx);<br>
><br>
> @@ -214,6 +216,17 @@<br>
>          SectionStack.back().first = Section;<br>
>      }<br>
><br>
> +    /// Initialize the streamer.<br>
> +    void InitStreamer() {<br>
> +      if (AutoInitSections)<br>
> +        InitSections();<br>
> +    }<br>
> +<br>
> +    /// Tell this MCStreamer to call InitSections upon initialization.<br>
> +    void setAutoInitSections(bool AutoInitSections) {<br>
> +      this->AutoInitSections = AutoInitSections;<br>
> +    }<br>
> +<br>
>      /// InitSections - Create the default sections and set the initial one.<br>
>      virtual void InitSections() = 0;<br>
><br>
><br>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=169785&r1=169784&r2=169785&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=169785&r1=169784&r2=169785&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)<br>
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Mon Dec 10 16:49:11 2012<br>
> @@ -149,6 +149,8 @@<br>
>  }<br>
><br>
>  bool AsmPrinter::doInitialization(Module &M) {<br>
> +  OutStreamer.InitStreamer();<br>
> +<br>
>    MMI = getAnalysisIfAvailable<MachineModuleInfo>();<br>
>    MMI->AnalyzeModule(M);<br>
><br>
><br>
> Modified: llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=169785&r1=169784&r2=169785&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp?rev=169785&r1=169784&r2=169785&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp (original)<br>
> +++ llvm/trunk/lib/CodeGen/LLVMTargetMachine.cpp Mon Dec 10 16:49:11 2012<br>
> @@ -202,7 +202,7 @@<br>
>                                                           *Context, *MAB, Out,<br>
>                                                           MCE, hasMCRelaxAll(),<br>
>                                                           hasMCNoExecStack()));<br>
> -    AsmStreamer.get()->InitSections();<br>
> +    AsmStreamer.get()->setAutoInitSections(true);<br>
>      break;<br>
>    }<br>
>    case CGFT_Null:<br>
><br>
> Modified: llvm/trunk/lib/MC/MCStreamer.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCStreamer.cpp?rev=169785&r1=169784&r2=169785&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCStreamer.cpp?rev=169785&r1=169784&r2=169785&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/lib/MC/MCStreamer.cpp (original)<br>
> +++ llvm/trunk/lib/MC/MCStreamer.cpp Mon Dec 10 16:49:11 2012<br>
> @@ -23,7 +23,8 @@<br>
><br>
>  MCStreamer::MCStreamer(MCContext &Ctx)<br>
>    : Context(Ctx), EmitEHFrame(true), EmitDebugFrame(false),<br>
> -    CurrentW64UnwindInfo(0), LastSymbol(0) {<br>
> +    CurrentW64UnwindInfo(0), LastSymbol(0),<br>
> +    AutoInitSections(false) {<br>
>    const MCSection *section = NULL;<br>
>    SectionStack.push_back(std::make_pair(section, section));<br>
>  }<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>