Mark VTables and RTTI data linkonce_odr instead of weak_odr, with the exception of explicit template instantiations, which have to be weak_odr.
This fixes PR6996. llvm-svn: 124089
This commit is contained in:
@@ -210,7 +210,7 @@ void CodeGenModule::setTypeVisibility(llvm::GlobalValue *GV,
|
||||
// in CGVTables.cpp.
|
||||
|
||||
// Preconditions.
|
||||
if (GV->getLinkage() != llvm::GlobalVariable::WeakODRLinkage ||
|
||||
if (GV->getLinkage() != llvm::GlobalVariable::LinkOnceODRLinkage ||
|
||||
GV->getVisibility() != llvm::GlobalVariable::DefaultVisibility)
|
||||
return;
|
||||
|
||||
@@ -1053,19 +1053,21 @@ CodeGenModule::getVTableLinkage(const CXXRecordDecl *RD) {
|
||||
case TSK_Undeclared:
|
||||
case TSK_ExplicitSpecialization:
|
||||
if (KeyFunction->isInlined())
|
||||
return llvm::GlobalVariable::WeakODRLinkage;
|
||||
return llvm::GlobalVariable::LinkOnceODRLinkage;
|
||||
|
||||
return llvm::GlobalVariable::ExternalLinkage;
|
||||
|
||||
case TSK_ImplicitInstantiation:
|
||||
return llvm::GlobalVariable::LinkOnceODRLinkage;
|
||||
|
||||
case TSK_ExplicitInstantiationDefinition:
|
||||
return llvm::GlobalVariable::WeakODRLinkage;
|
||||
|
||||
|
||||
case TSK_ExplicitInstantiationDeclaration:
|
||||
// FIXME: Use available_externally linkage. However, this currently
|
||||
// breaks LLVM's build due to undefined symbols.
|
||||
// return llvm::GlobalVariable::AvailableExternallyLinkage;
|
||||
return llvm::GlobalVariable::WeakODRLinkage;
|
||||
return llvm::GlobalVariable::LinkOnceODRLinkage;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1073,6 +1075,8 @@ CodeGenModule::getVTableLinkage(const CXXRecordDecl *RD) {
|
||||
case TSK_Undeclared:
|
||||
case TSK_ExplicitSpecialization:
|
||||
case TSK_ImplicitInstantiation:
|
||||
return llvm::GlobalVariable::LinkOnceODRLinkage;
|
||||
|
||||
case TSK_ExplicitInstantiationDefinition:
|
||||
return llvm::GlobalVariable::WeakODRLinkage;
|
||||
|
||||
@@ -1080,11 +1084,11 @@ CodeGenModule::getVTableLinkage(const CXXRecordDecl *RD) {
|
||||
// FIXME: Use available_externally linkage. However, this currently
|
||||
// breaks LLVM's build due to undefined symbols.
|
||||
// return llvm::GlobalVariable::AvailableExternallyLinkage;
|
||||
return llvm::GlobalVariable::WeakODRLinkage;
|
||||
return llvm::GlobalVariable::LinkOnceODRLinkage;
|
||||
}
|
||||
|
||||
// Silence GCC warning.
|
||||
return llvm::GlobalVariable::WeakODRLinkage;
|
||||
return llvm::GlobalVariable::LinkOnceODRLinkage;
|
||||
}
|
||||
|
||||
CharUnits CodeGenModule::GetTargetTypeStoreSize(const llvm::Type *Ty) const {
|
||||
|
||||
Reference in New Issue
Block a user