From: Eli Friedman Date: Tue, 8 Dec 2009 04:09:14 +0000 (+0000) Subject: Slight tweak to vtable linkage. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0259ce2b4a94b7d1b28a084b76650cbf448e3eb8;p=clang Slight tweak to vtable linkage. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90832 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGVtable.cpp b/lib/CodeGen/CGVtable.cpp index 7efa88b8e1..ef680d927d 100644 --- a/lib/CodeGen/CGVtable.cpp +++ b/lib/CodeGen/CGVtable.cpp @@ -1462,7 +1462,7 @@ void CGVtableInfo::MaybeEmitVtable(GlobalDecl GD) { llvm::GlobalVariable::LinkageTypes Linkage; if (RD->isInAnonymousNamespace()) Linkage = llvm::GlobalVariable::InternalLinkage; - else if (KeyFunction) + else if (KeyFunction && !MD->isInlined()) Linkage = llvm::GlobalVariable::ExternalLinkage; else Linkage = llvm::GlobalVariable::WeakODRLinkage; diff --git a/test/CodeGenCXX/key-function-vtable.cpp b/test/CodeGenCXX/key-function-vtable.cpp index ac88067a78..e61f33a4cf 100644 --- a/test/CodeGenCXX/key-function-vtable.cpp +++ b/test/CodeGenCXX/key-function-vtable.cpp @@ -35,7 +35,7 @@ testg *testgvar = new testg; // FIXME: The checks are extremely difficult to get right when the globals // aren't alphabetized // CHECK: @_ZTV5testa = constant [3 x i8*] [i8* null -// CHECK: @_ZTV5testc = constant [3 x i8*] [i8* null +// CHECK: @_ZTV5testc = weak_odr constant [3 x i8*] [i8* null // CHECK: @_ZTVN12_GLOBAL__N_15testgE = internal constant [3 x i8*] [i8* null // CHECK: @_ZTV5teste = weak_odr constant [3 x i8*] [i8* null // CHECK: @_ZTV5testb = weak_odr constant [3 x i8*] [i8* null