mirror of https://github.com/microsoft/clang.git
Set dso_local on external rtti GVs.
In this particular case it would be possible to just add an else with CGM.setDSOLocal(GV), but it seems better to have as many callers as possible just call setGVProperties so that we can centralize the logic there. This patch then makes setGVProperties able to handle null Decls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@327543 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d90fea1808
commit
ac11dcec21
|
@ -707,7 +707,8 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
|
|||
GV->setVisibility(llvm::GlobalValue::DefaultVisibility);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!D)
|
||||
return;
|
||||
// Set visibility for definitions.
|
||||
LinkageInfo LV = D->getLinkageAndVisibility();
|
||||
if (LV.isVisibilityExplicit() || !GV->isDeclarationForLinker())
|
||||
|
@ -797,7 +798,7 @@ void CodeGenModule::setDLLImportDLLExport(llvm::GlobalValue *GV,
|
|||
|
||||
void CodeGenModule::setDLLImportDLLExport(llvm::GlobalValue *GV,
|
||||
const NamedDecl *D) const {
|
||||
if (D->isExternallyVisible()) {
|
||||
if (D && D->isExternallyVisible()) {
|
||||
if (D->hasAttr<DLLImportAttr>())
|
||||
GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);
|
||||
else if (D->hasAttr<DLLExportAttr>() && !GV->isDeclarationForLinker())
|
||||
|
|
|
@ -2616,10 +2616,8 @@ ItaniumRTTIBuilder::GetAddrOfExternalRTTIDescriptor(QualType Ty) {
|
|||
/*Constant=*/true,
|
||||
llvm::GlobalValue::ExternalLinkage, nullptr,
|
||||
Name);
|
||||
if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {
|
||||
const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());
|
||||
CGM.setGVProperties(GV, RD);
|
||||
}
|
||||
const CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
|
||||
CGM.setGVProperties(GV, RD);
|
||||
}
|
||||
|
||||
return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);
|
||||
|
|
|
@ -10,7 +10,7 @@ void attempt() {
|
|||
try { except(); } catch (...) { }
|
||||
}
|
||||
|
||||
// CHECK: @_ZTIi = external constant i8*
|
||||
// CHECK: @_ZTIi = external dso_local constant i8*
|
||||
|
||||
// CHECK: define {{.*}}void @_Z6exceptv() {{.*}} {
|
||||
// CHECK: %exception = call {{.*}}i8* @__cxa_allocate_exception(i32 4)
|
||||
|
|
Loading…
Reference in New Issue