diff options
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 5 | ||||
-rw-r--r-- | clang/lib/CodeGen/ItaniumCXXABI.cpp | 6 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/windows-itanium-exceptions.cpp | 2 |
3 files changed, 6 insertions, 7 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index de3810554f9..e75780a0a93 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -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()) diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index 21223ea23dd..3862b58a49f 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -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); diff --git a/clang/test/CodeGenCXX/windows-itanium-exceptions.cpp b/clang/test/CodeGenCXX/windows-itanium-exceptions.cpp index b2c8707efc0..1bca4e89171 100644 --- a/clang/test/CodeGenCXX/windows-itanium-exceptions.cpp +++ b/clang/test/CodeGenCXX/windows-itanium-exceptions.cpp @@ -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) |