diff options
Diffstat (limited to 'gnu/llvm/tools/clang/lib/CodeGen/CGCXXABI.cpp')
| -rw-r--r-- | gnu/llvm/tools/clang/lib/CodeGen/CGCXXABI.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gnu/llvm/tools/clang/lib/CodeGen/CGCXXABI.cpp b/gnu/llvm/tools/clang/lib/CodeGen/CGCXXABI.cpp index a27c3e9d27e..3b1b47cdfe0 100644 --- a/gnu/llvm/tools/clang/lib/CodeGen/CGCXXABI.cpp +++ b/gnu/llvm/tools/clang/lib/CodeGen/CGCXXABI.cpp @@ -51,9 +51,9 @@ CGCallee CGCXXABI::EmitLoadOfMemberFunctionPointer( ErrorUnsupportedABI(CGF, "calls through member pointers"); ThisPtrForCall = This.getPointer(); - const FunctionProtoType *FPT = + const FunctionProtoType *FPT = MPT->getPointeeType()->getAs<FunctionProtoType>(); - const CXXRecordDecl *RD = + const CXXRecordDecl *RD = cast<CXXRecordDecl>(MPT->getClass()->getAs<RecordType>()->getDecl()); llvm::FunctionType *FTy = CGM.getTypes().GetFunctionType( CGM.getTypes().arrangeCXXMethodType(RD, FPT, /*FD=*/nullptr)); @@ -287,6 +287,20 @@ CGCXXABI::EmitCtorCompleteObjectHandler(CodeGenFunction &CGF, return nullptr; } +void CGCXXABI::setCXXDestructorDLLStorage(llvm::GlobalValue *GV, + const CXXDestructorDecl *Dtor, + CXXDtorType DT) const { + // Assume the base C++ ABI has no special rules for destructor variants. + CGM.setDLLImportDLLExport(GV, Dtor); +} + +llvm::GlobalValue::LinkageTypes CGCXXABI::getCXXDestructorLinkage( + GVALinkage Linkage, const CXXDestructorDecl *Dtor, CXXDtorType DT) const { + // Delegate back to CGM by default. + return CGM.getLLVMLinkageForDeclarator(Dtor, Linkage, + /*isConstantVariable=*/false); +} + bool CGCXXABI::NeedsVTTParameter(GlobalDecl GD) { return false; } |
