r209046 - If a declaration is loaded, and then a module import adds a redeclaration, then

Richard Smith richard at metafoo.co.uk
Sun May 18 14:25:33 PDT 2014


On Sun, May 18, 2014 at 9:47 AM, İsmail Dönmez <ismail at donmez.ws> wrote:

> Hi,
>
>
> On Sat, May 17, 2014 at 2:01 AM, Richard Smith <richard-llvm at metafoo.co.uk
> > wrote:
>
>> Author: rsmith
>> Date: Fri May 16 18:01:30 2014
>> New Revision: 209046
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=209046&view=rev
>> Log:
>> If a declaration is loaded, and then a module import adds a
>> redeclaration, then
>> ensure that querying the first declaration for its most recent declaration
>> checks for redeclarations from the imported module.
>>
>>
> This breaks openSUSE i586/x86-64 builds, might be due to ld's --as-needed
> support by default:
>
>  [ 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" && :
> [ 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*)':
> [ 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*)'
> [ 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*)'
> [ 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*)'
> [ 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*)'
> [ 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*)'
> [ 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
> [ 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
> [ 1288s]
> /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld:
> final link failed: Bad value
> [ 1288s] clang-3.5: error: linker command failed with exit code 1 (use -v
> to see invocation)
>

Probably the same as PR19774. Does this patch help:

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140518/c6b32399/attachment.html>


More information about the cfe-commits mailing list