<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, May 18, 2014 at 9:47 AM, İsmail Dönmez <span dir="ltr"><<a href="mailto:ismail@donmez.ws" target="_blank">ismail@donmez.ws</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hi,<div class="gmail_extra"><br><br><div class="gmail_quote">
<div>On Sat, May 17, 2014 at 2:01 AM, Richard Smith <span dir="ltr"><<a href="mailto:richard-llvm@metafoo.co.uk" target="_blank">richard-llvm@metafoo.co.uk</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: rsmith<br>
Date: Fri May 16 18:01:30 2014<br>
New Revision: 209046<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=209046&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=209046&view=rev</a><br>
Log:<br>
If a declaration is loaded, and then a module import adds a redeclaration, then<br>
ensure that querying the first declaration for its most recent declaration<br>
checks for redeclarations from the imported module.<br><br></blockquote><div><br></div></div><div>This breaks openSUSE i586/x86-64 builds, might be due to ld's --as-needed support by default:</div><div><br></div><div>

<div>

[ 1288s] FAILED: : && /home/abuild/rpmbuild/BUILD/llvm/stage1/bin/clang++  -fPIC -O0 -stdlib=libc++ -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -std=c++11 -fcolor-diagnostics -ffunction-sections -fdata-sections -O2 -g -DNDEBUG  -stdlib=libc++   -Wl,--gc-sections -shared -Wl,-soname,libclangAnalysis.so -o lib/libclangAnalysis.so tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/AnalysisDeclContext.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/BodyFarm.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/CFG.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/CFGReachabilityAnalysis.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/CFGStmtMap.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/CallGraph.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/CocoaConventions.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/Consumed.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/Dominators.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/FormatString.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/LiveVariables.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ObjCNoReturn.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/PostOrderCFGView.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/PrintfFormatString.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ProgramPoint.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/PseudoConstantAnalysis.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ReachableCode.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ScanfFormatString.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ThreadSafety.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ThreadSafetyCommon.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ThreadSafetyLogical.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ThreadSafetyTIL.cpp.o tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/UninitializedValues.cpp.o  lib/libclangBasic.so lib/libclangAST.so lib/libLLVMMC.so lib/libLLVMSupport.so lib/libclangLex.so lib/libclangBasic.so lib/libLLVMMC.so lib/libLLVMObject.so lib/libLLVMBitReader.so lib/libLLVMCore.so lib/libLLVMSupport.so -lrt -ldl -ltinfo -lpthread -lz -Wl,-rpath,"\$ORIGIN/../lib64" && :</div>



<div>[ 1288s] tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ThreadSafety.cpp.o: In function `clang::LazyGenerationalUpdatePtr<clang::Decl const*, clang::Decl*, &clang::ExternalASTSource::CompleteRedeclChain>::LazyGenerationalUpdatePtr(clang::ASTContext const&, clang::Decl*)':</div>



<div>[ 1288s] /home/abuild/rpmbuild/BUILD/llvm/stage2/../tools/clang/include/clang/AST/ExternalASTSource.h:402: undefined reference to `clang::LazyGenerationalUpdatePtr<clang::Decl const*, clang::Decl*, &clang::ExternalASTSource::CompleteRedeclChain>::makeValue(clang::ASTContext const&, clang::Decl*)'</div>



<div>[ 1288s] /home/abuild/rpmbuild/BUILD/llvm/stage2/../tools/clang/include/clang/AST/ExternalASTSource.h:402: undefined reference to `clang::LazyGenerationalUpdatePtr<clang::Decl const*, clang::Decl*, &clang::ExternalASTSource::CompleteRedeclChain>::makeValue(clang::ASTContext const&, clang::Decl*)'</div>



<div>[ 1288s] /home/abuild/rpmbuild/BUILD/llvm/stage2/../tools/clang/include/clang/AST/ExternalASTSource.h:402: undefined reference to `clang::LazyGenerationalUpdatePtr<clang::Decl const*, clang::Decl*, &clang::ExternalASTSource::CompleteRedeclChain>::makeValue(clang::ASTContext const&, clang::Decl*)'</div>



<div>[ 1288s] /home/abuild/rpmbuild/BUILD/llvm/stage2/../tools/clang/include/clang/AST/ExternalASTSource.h:402: undefined reference to `clang::LazyGenerationalUpdatePtr<clang::Decl const*, clang::Decl*, &clang::ExternalASTSource::CompleteRedeclChain>::makeValue(clang::ASTContext const&, clang::Decl*)'</div>



<div>[ 1288s] /home/abuild/rpmbuild/BUILD/llvm/stage2/../tools/clang/include/clang/AST/ExternalASTSource.h:402: undefined reference to `clang::LazyGenerationalUpdatePtr<clang::Decl const*, clang::Decl*, &clang::ExternalASTSource::CompleteRedeclChain>::makeValue(clang::ASTContext const&, clang::Decl*)'</div>



<div>[ 1288s] tools/clang/lib/Analysis/CMakeFiles/clangAnalysis.dir/ThreadSafety.cpp.o:/home/abuild/rpmbuild/BUILD/llvm/stage2/../tools/clang/include/clang/AST/ExternalASTSource.h:402: more undefined references to `clang::LazyGenerationalUpdatePtr<clang::Decl const*, clang::Decl*, &clang::ExternalASTSource::CompleteRedeclChain>::makeValue(clang::ASTContext const&, clang::Decl*)' follow</div>



<div>[ 1288s] /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: lib/libclangAnalysis.so: hidden symbol `_ZN5clang25LazyGenerationalUpdatePtrIPKNS_4DeclEPS1_XadL_ZNS_17ExternalASTSource19CompleteRedeclChainES3_EEE9makeValueERKNS_10ASTContextES4_' isn't defined</div>



<div>[ 1288s] /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: final link failed: Bad value</div><div>[ 1288s] clang-3.5: error: linker command failed with exit code 1 (use -v to see invocation) </div>

</div></div></div></div>
</blockquote></div><br></div><div class="gmail_extra">Probably the same as PR19774. Does this patch help:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><pre style="color:rgb(0,0,0)">Index: include/clang/AST/ASTContext.h
===================================================================
--- include/clang/AST/ASTContext.h      (revision 209099)
+++ include/clang/AST/ASTContext.h      (working copy)
@@ -2402,11 +2402,19 @@
     clang::LazyGenerationalUpdatePtr<Owner, T, Update>::makeValue(
         const clang::ASTContext &Ctx, T Value) {
   // Note, this is implemented here so that ExternalASTSource.h doesn't need to
-  // include ASTContext.h. We explicitly instantiate it for all relevant types
-  // in ASTContext.cpp.
+  // include ASTContext.h. We explicitly instantiate it for all relevant types,
+  // below and in ASTContext.cpp.
   if (auto *Source = Ctx.getExternalSource())
     return new (Ctx) LazyData(Source, Value);
   return Value;
 }
 
+// The corresponding explicit instantiation definition is in ASTContext.cpp.
+extern template
+clang::LazyGenerationalUpdatePtr<
+    const clang::Decl *, clang::Decl *, &clang::ExternalASTSource::CompleteRedeclChain>::ValueType
+clang::LazyGenerationalUpdatePtr<
+    const clang::Decl *, clang::Decl *, &clang::ExternalASTSource::CompleteRedeclChain>::makeValue(
+        const clang::ASTContext &Ctx, clang::Decl *Value);
+
 #endif</pre></div></div>