<div dir="ltr">(Sorry this took me so long to get back to...)<br><br><div class="gmail_quote"><div dir="ltr">On Tue, Dec 13, 2016 at 1:11 PM Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:</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"><div class="gmail_extra gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">This introduced an MSVC warning which I think is pretty reasonable:</div><div class="gmail_msg">[402/3123] Building CXX object lib\Analysis\CMakeFiles\LLVMAnalysis.dir\CGSCCPassManager.cpp.obj</div><div class="gmail_msg">C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\include\llvm/IR/PassManager.h(803): warning C4661: 'bool llvm::InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager,llvm::LazyCallGraph::SCC,llvm::LazyCallGraph &>::Result::invalidate(IRUnitT &,const llvm::PreservedAnalyses &,llvm::AnalysisManager<IRUnitT,llvm::LazyCallGraph &>::Invalidator &)': no suitable definition provided for explicit template instantiation request</div><div class="gmail_msg">        with</div><div class="gmail_msg">        [</div><div class="gmail_msg">            IRUnitT=llvm::LazyCallGraph::SCC</div><div class="gmail_msg">        ]</div><div class="gmail_msg">C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\include\llvm/IR/PassManager.h(798): note: see declaration of 'llvm::InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager,llvm::LazyCallGraph::SCC,llvm::LazyCallGraph &>::Result::invalidate'</div><div class="gmail_msg">C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\include\llvm/Analysis/CGSCCPassManager.h(486): warning C4661: 'bool llvm::InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager,llvm::LazyCallGraph::SCC,llvm::LazyCallGraph &>::Result::invalidate(IRUnitT &,const llvm::PreservedAnalyses &,llvm::AnalysisManager<IRUnitT,llvm::LazyCallGraph &>::Invalidator &)': no suitable definition provided for explicit template instantiation request</div><div class="gmail_msg">        with</div><div class="gmail_msg">        [</div><div class="gmail_msg">            IRUnitT=llvm::LazyCallGraph::SCC</div><div class="gmail_msg">        ]</div><div class="gmail_msg">C:\b\slave\clang-x86-windows-msvc2015\clang-x86-windows-msvc2015\llvm\include\llvm/IR/PassManager.h(798): note: see declaration of 'llvm::InnerAnalysisManagerProxy<llvm::FunctionAnalysisManager,llvm::LazyCallGraph::SCC,llvm::LazyCallGraph &>::Result::invalidate'</div><div class="gmail_msg">[403/3123] Building CXX object lib\Transforms\Vectorize\CMakeFiles\LLVMVectorize.dir\BBVectorize.cpp.obj </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I think it's complaining that 'invalidate' is a declaration, and you never provide a definition for it, only a specialization of it later.</div></div></div></div></blockquote><div><br></div><div>I mean, yes it is complaining about that, but not because there is a specialization anywhere, but because there isn't.</div><div><br></div><div>This was completely bogus code that got left in when other code changed. I have no idea why Clang accepts this at all. I think it should at *least* be a warning and possibly an error to explicitly instantiate a class template when some members aren't yet defined. I've deleted all the dead code in r290327. Want to file a Clang bug to diagnose this nonsense?</div><div> </div></div></div>