<div dir="ltr">We've found the actual source error and I'm working on a patch that reverts this and fixes it properly.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Feb 6, 2017 at 3:20 PM Chandler Carruth <<a href="mailto:chandlerc@gmail.com">chandlerc@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Are there any reproduction steps that don't involve mingw?</div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Mon, Feb 6, 2017 at 3:19 PM Chandler Carruth <<a href="mailto:chandlerc@gmail.com" class="gmail_msg" target="_blank">chandlerc@gmail.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">I don't think this is true.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I can definitely query clang, and right now, the *only* usage of the extern template declarations you added in this patch are the explicit instantiations. No other code uses them.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">So what this patch is doing is disabling the extern template entirely for all practical purposes. It is possible that this works around a bug, but it is not the correct fix. We need to find the correct fix for this issue.</div></div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Mon, Feb 6, 2017 at 3:17 PM NAKAMURA Takumi 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"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Chandler, even Clang doesn't instantiate Key as expected.<div class="gmail_msg">Should we wait for clang (and gcc) fixed? For now, I hope to let trunk just working.</div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Tue, Feb 7, 2017 at 8:12 AM Chandler Carruth <<a href="mailto:chandlerc@gmail.com" class="gmail_msg" target="_blank">chandlerc@gmail.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">Sorry my brain was filled with another set of problems, but trying to cycle back to this....</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I totally believe that there is a real bug to solve here, but this patch is not the fix.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Let's look at the types themselves we now have in tree:</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">```</div><div class="gmail_msg">extern template class OuterAnalysisManagerProxy<ModuleAnalysisManager, LazyCallGraph::SCC>;<br class="gmail_msg"></div><div class="gmail_msg">```</div><div class="gmail_msg">vs.</div><div class="gmail_msg">```</div><div class="gmail_msg">typedef OuterAnalysisManagerProxy<ModuleAnalysisManager, LazyCallGraph::SCC, LazyCallGraph &> ModuleAnaylsisManagerCGSCCProxy;</div><div class="gmail_msg">```</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">These are *not the same types* and they are explicitly documented that they should be the same types.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">This patch is not correct. I'm happy to try to solve the bug that you are hitting, but this is regressing every other platform that has a correct compiler because the extern template is for *the wrong type*.</div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">-Chandler</div></div></div><div dir="ltr" class="gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div dir="ltr" class="gmail_msg">On Mon, Feb 6, 2017 at 3:07 PM NAKAMURA Takumi 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"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">I would like you to pull it.<div class="gmail_msg"><br class="gmail_msg"><div class="gmail_msg">See also; <a href="http://bb.pgr.jp/builders/ninja-clang-x64-mingw64-RA/builds/15598" class="gmail_msg" target="_blank">http://bb.pgr.jp/builders/ninja-clang-x64-mingw64-RA/builds/15598</a></div></div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Sat, Feb 4, 2017 at 6:59 AM Hans Wennborg <<a href="mailto:hans@chromium.org" class="gmail_msg" target="_blank">hans@chromium.org</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hmm, what's the status here? It seems this change is still in trunk.<br class="gmail_msg">
Should it be merged?<br class="gmail_msg">
<br class="gmail_msg">
On Mon, Jan 30, 2017 at 8:03 AM, NAKAMURA Takumi <<a href="mailto:geek4civic@gmail.com" class="gmail_msg" target="_blank">geek4civic@gmail.com</a>> wrote:<br class="gmail_msg">
> Chandler,<br class="gmail_msg">
><br class="gmail_msg">
> I am confused what were correct.<br class="gmail_msg">
><br class="gmail_msg">
> Before r293017, they are instantiated explicitly,<br class="gmail_msg">
>   llvm::OuterAnalysisManagerProxy<llvm::AnalysisManager<llvm::Module>,<br class="gmail_msg">
> llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>::Key<br class="gmail_msg">
>   llvm::OuterAnalysisManagerProxy<llvm::AnalysisManager<llvm::Function>,<br class="gmail_msg">
> llvm::Loop, llvm::LoopStandardAnalysisResults&>::Key<br class="gmail_msg">
><br class="gmail_msg">
> They are not referred outside of libLLVMAnalysis.so.<br class="gmail_msg">
> Besides, linking can be done successfully even if their instantiations (in<br class="gmail_msg">
> Analysis/*.cpp) are pruned.<br class="gmail_msg">
><br class="gmail_msg">
> I am dubious it would be correct.<br class="gmail_msg">
> I have confirmed on x86_64-linux with clang++-trunk, BUILD_SHARED_LIBS=ON.<br class="gmail_msg">
><br class="gmail_msg">
> I just would like to instantiate OuterAnalysisManagerProxy::Key explicitly.<br class="gmail_msg">
> Let me know if you have better idea. Just reverting would make things worse.<br class="gmail_msg">
><br class="gmail_msg">
> FYI, failure log is here;<br class="gmail_msg">
> <a href="http://bb.pgr.jp/builders/ninja-clang-x64-mingw64-RA/builds/15409" rel="noreferrer" class="gmail_msg" target="_blank">http://bb.pgr.jp/builders/ninja-clang-x64-mingw64-RA/builds/15409</a><br class="gmail_msg">
><br class="gmail_msg">
> On Mon, Jan 30, 2017 at 8:05 AM Chandler Carruth <<a href="mailto:chandlerc@gmail.com" class="gmail_msg" target="_blank">chandlerc@gmail.com</a>><br class="gmail_msg">
> wrote:<br class="gmail_msg">
>><br class="gmail_msg">
>> This change is not correct at all. Please revert as it causes other<br class="gmail_msg">
>> platforms to no longer have the necessary extern template declaration. What<br class="gmail_msg">
>> failure are you trying to address?<br class="gmail_msg">
>><br class="gmail_msg">
>><br class="gmail_msg">
>> On Sun, Jan 29, 2017, 14:03 NAKAMURA Takumi <<a href="mailto:geek4civic@gmail.com" class="gmail_msg" target="_blank">geek4civic@gmail.com</a>> wrote:<br class="gmail_msg">
>>><br class="gmail_msg">
>>> Hans, could you pull this into 4.0, please?<br class="gmail_msg">
>>><br class="gmail_msg">
>>> 2017年1月25日(水) 13:37 NAKAMURA Takumi via llvm-commits<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">
>>>><br class="gmail_msg">
>>>> Author: chapuni<br class="gmail_msg">
>>>> Date: Tue Jan 24 22:26:29 2017<br class="gmail_msg">
>>>> New Revision: 293017<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=293017&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=293017&view=rev</a><br class="gmail_msg">
>>>> Log:<br class="gmail_msg">
>>>> Rewind instantiations of OuterAnalysisManagerProxy in r289317, r291651,<br class="gmail_msg">
>>>> and r291662.<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> I found root class should be instantiated for variadic tempate to<br class="gmail_msg">
>>>> instantiate static member explicitly.<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> This will fix failures in mingw DLL build.<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> Modified:<br class="gmail_msg">
>>>>     llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h<br class="gmail_msg">
>>>>     llvm/trunk/include/llvm/Analysis/LoopAnalysisManager.h<br class="gmail_msg">
>>>>     llvm/trunk/lib/Analysis/CGSCCPassManager.cpp<br class="gmail_msg">
>>>>     llvm/trunk/lib/Analysis/LoopAnalysisManager.cpp<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> Modified: llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h<br class="gmail_msg">
>>>> URL:<br class="gmail_msg">
>>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h?rev=293017&r1=293016&r2=293017&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h?rev=293017&r1=293016&r2=293017&view=diff</a><br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> ==============================================================================<br class="gmail_msg">
>>>> --- llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h (original)<br class="gmail_msg">
>>>> +++ llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h Tue Jan 24<br class="gmail_msg">
>>>> 22:26:29 2017<br class="gmail_msg">
>>>> @@ -191,8 +191,8 @@ CGSCCAnalysisManagerModuleProxy::run(Mod<br class="gmail_msg">
>>>>  // template.<br class="gmail_msg">
>>>>  extern template class InnerAnalysisManagerProxy<CGSCCAnalysisManager,<br class="gmail_msg">
>>>> Module>;<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> -extern template class OuterAnalysisManagerProxy<<br class="gmail_msg">
>>>> -    ModuleAnalysisManager, LazyCallGraph::SCC, LazyCallGraph &>;<br class="gmail_msg">
>>>> +extern template class OuterAnalysisManagerProxy<ModuleAnalysisManager,<br class="gmail_msg">
>>>> +                                                LazyCallGraph::SCC>;<br class="gmail_msg">
>>>>  /// A proxy from a \c ModuleAnalysisManager to an \c SCC.<br class="gmail_msg">
>>>>  typedef OuterAnalysisManagerProxy<ModuleAnalysisManager,<br class="gmail_msg">
>>>> LazyCallGraph::SCC,<br class="gmail_msg">
>>>>                                    LazyCallGraph &><br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> Modified: llvm/trunk/include/llvm/Analysis/LoopAnalysisManager.h<br class="gmail_msg">
>>>> URL:<br class="gmail_msg">
>>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopAnalysisManager.h?rev=293017&r1=293016&r2=293017&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopAnalysisManager.h?rev=293017&r1=293016&r2=293017&view=diff</a><br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> ==============================================================================<br class="gmail_msg">
>>>> --- llvm/trunk/include/llvm/Analysis/LoopAnalysisManager.h (original)<br class="gmail_msg">
>>>> +++ llvm/trunk/include/llvm/Analysis/LoopAnalysisManager.h Tue Jan 24<br class="gmail_msg">
>>>> 22:26:29 2017<br class="gmail_msg">
>>>> @@ -141,8 +141,7 @@ LoopAnalysisManagerFunctionProxy::run(Fu<br class="gmail_msg">
>>>>  // template.<br class="gmail_msg">
>>>>  extern template class InnerAnalysisManagerProxy<LoopAnalysisManager,<br class="gmail_msg">
>>>> Function>;<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> -extern template class<br class="gmail_msg">
>>>> OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop,<br class="gmail_msg">
>>>> -<br class="gmail_msg">
>>>> LoopStandardAnalysisResults &>;<br class="gmail_msg">
>>>> +extern template class<br class="gmail_msg">
>>>> OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop>;<br class="gmail_msg">
>>>>  /// A proxy from a \c FunctionAnalysisManager to a \c Loop.<br class="gmail_msg">
>>>>  typedef OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop,<br class="gmail_msg">
>>>>                                    LoopStandardAnalysisResults &><br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> Modified: llvm/trunk/lib/Analysis/CGSCCPassManager.cpp<br class="gmail_msg">
>>>> URL:<br class="gmail_msg">
>>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CGSCCPassManager.cpp?rev=293017&r1=293016&r2=293017&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CGSCCPassManager.cpp?rev=293017&r1=293016&r2=293017&view=diff</a><br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> ==============================================================================<br class="gmail_msg">
>>>> --- llvm/trunk/lib/Analysis/CGSCCPassManager.cpp (original)<br class="gmail_msg">
>>>> +++ llvm/trunk/lib/Analysis/CGSCCPassManager.cpp Tue Jan 24 22:26:29<br class="gmail_msg">
>>>> 2017<br class="gmail_msg">
>>>> @@ -24,7 +24,7 @@ template class PassManager<LazyCallGraph<br class="gmail_msg">
>>>>                             LazyCallGraph &, CGSCCUpdateResult &>;<br class="gmail_msg">
>>>>  template class InnerAnalysisManagerProxy<CGSCCAnalysisManager, Module>;<br class="gmail_msg">
>>>>  template class OuterAnalysisManagerProxy<ModuleAnalysisManager,<br class="gmail_msg">
>>>> -                                         LazyCallGraph::SCC,<br class="gmail_msg">
>>>> LazyCallGraph &>;<br class="gmail_msg">
>>>> +                                         LazyCallGraph::SCC>;<br class="gmail_msg">
>>>>  template class OuterAnalysisManagerProxy<CGSCCAnalysisManager,<br class="gmail_msg">
>>>> Function>;<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>>  /// Explicitly specialize the pass manager run method to handle call<br class="gmail_msg">
>>>> graph<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> Modified: llvm/trunk/lib/Analysis/LoopAnalysisManager.cpp<br class="gmail_msg">
>>>> URL:<br class="gmail_msg">
>>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopAnalysisManager.cpp?rev=293017&r1=293016&r2=293017&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopAnalysisManager.cpp?rev=293017&r1=293016&r2=293017&view=diff</a><br class="gmail_msg">
>>>><br class="gmail_msg">
>>>> ==============================================================================<br class="gmail_msg">
>>>> --- llvm/trunk/lib/Analysis/LoopAnalysisManager.cpp (original)<br class="gmail_msg">
>>>> +++ llvm/trunk/lib/Analysis/LoopAnalysisManager.cpp Tue Jan 24 22:26:29<br class="gmail_msg">
>>>> 2017<br class="gmail_msg">
>>>> @@ -23,8 +23,7 @@ namespace llvm {<br class="gmail_msg">
>>>>  template class AllAnalysesOn<Loop>;<br class="gmail_msg">
>>>>  template class AnalysisManager<Loop, LoopStandardAnalysisResults &>;<br class="gmail_msg">
>>>>  template class InnerAnalysisManagerProxy<LoopAnalysisManager,<br class="gmail_msg">
>>>> Function>;<br class="gmail_msg">
>>>> -template class OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop,<br class="gmail_msg">
>>>> -                                         LoopStandardAnalysisResults<br class="gmail_msg">
>>>> &>;<br class="gmail_msg">
>>>> +template class OuterAnalysisManagerProxy<FunctionAnalysisManager,<br class="gmail_msg">
>>>> Loop>;<br class="gmail_msg">
>>>><br class="gmail_msg">
>>>>  bool LoopAnalysisManagerFunctionProxy::Result::invalidate(<br class="gmail_msg">
>>>>      Function &F, const PreservedAnalyses &PA,<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">
</blockquote></div>
_______________________________________________<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">
</blockquote></div></div></blockquote></div>
_______________________________________________<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">
</blockquote></div></blockquote></div></blockquote></div>