@@ -120,8 +120,7 @@ class MicrosoftCXXABI : public CGCXXABI {
120120
121121 void emitVirtualObjectDelete (CodeGenFunction &CGF, const CXXDeleteExpr *DE,
122122 Address Ptr, QualType ElementType,
123- const CXXDestructorDecl *Dtor,
124- bool ArrayDeletion) override ;
123+ const CXXDestructorDecl *Dtor) override ;
125124
126125 void emitRethrow (CodeGenFunction &CGF, bool isNoReturn) override ;
127126 void emitThrow (CodeGenFunction &CGF, const CXXThrowExpr *E) override ;
@@ -336,12 +335,11 @@ class MicrosoftCXXABI : public CGCXXABI {
336335 Address This, llvm::Type *Ty,
337336 SourceLocation Loc) override ;
338337
339- llvm::Value *EmitVirtualDestructorCall (CodeGenFunction &CGF,
340- const CXXDestructorDecl *Dtor,
341- CXXDtorType DtorType, Address This,
342- DeleteOrMemberCallExpr E,
343- llvm::CallBase **CallOrInvoke,
344- bool ArrayDeletion) override ;
338+ llvm::Value *
339+ EmitVirtualDestructorCall (CodeGenFunction &CGF, const CXXDestructorDecl *Dtor,
340+ CXXDtorType DtorType, Address This,
341+ DeleteOrMemberCallExpr E,
342+ llvm::CallBase **CallOrInvoke) override ;
345343
346344 void adjustCallArgsForDestructorThunk (CodeGenFunction &CGF, GlobalDecl GD,
347345 CallArgList &CallArgs) override {
@@ -891,16 +889,15 @@ MicrosoftCXXABI::getRecordArgABI(const CXXRecordDecl *RD) const {
891889
892890void MicrosoftCXXABI::emitVirtualObjectDelete (CodeGenFunction &CGF,
893891 const CXXDeleteExpr *DE,
894- Address Ptr, QualType ElementType,
895- const CXXDestructorDecl *Dtor ,
896- bool ArrayDeletion ) {
892+ Address Ptr,
893+ QualType ElementType ,
894+ const CXXDestructorDecl *Dtor ) {
897895 // FIXME: Provide a source location here even though there's no
898896 // CXXMemberCallExpr for dtor call.
899897 bool UseGlobalDelete = DE->isGlobalDelete ();
900898 CXXDtorType DtorType = UseGlobalDelete ? Dtor_Complete : Dtor_Deleting;
901- llvm::Value *MDThis =
902- EmitVirtualDestructorCall (CGF, Dtor, DtorType, Ptr, DE,
903- /* CallOrInvoke=*/ nullptr , ArrayDeletion);
899+ llvm::Value *MDThis = EmitVirtualDestructorCall (CGF, Dtor, DtorType, Ptr, DE,
900+ /* CallOrInvoke=*/ nullptr );
904901 if (UseGlobalDelete)
905902 CGF.EmitDeleteCall (DE->getOperatorDelete (), MDThis, ElementType);
906903}
@@ -2005,8 +2002,7 @@ CGCallee MicrosoftCXXABI::getVirtualFunctionPointer(CodeGenFunction &CGF,
20052002
20062003llvm::Value *MicrosoftCXXABI::EmitVirtualDestructorCall (
20072004 CodeGenFunction &CGF, const CXXDestructorDecl *Dtor, CXXDtorType DtorType,
2008- Address This, DeleteOrMemberCallExpr E, llvm::CallBase **CallOrInvoke,
2009- bool ArrayDeletion) {
2005+ Address This, DeleteOrMemberCallExpr E, llvm::CallBase **CallOrInvoke) {
20102006 auto *CE = dyn_cast<const CXXMemberCallExpr *>(E);
20112007 auto *D = dyn_cast<const CXXDeleteExpr *>(E);
20122008 assert ((CE != nullptr ) ^ (D != nullptr ));
@@ -2023,9 +2019,8 @@ llvm::Value *MicrosoftCXXABI::EmitVirtualDestructorCall(
20232019 CGCallee Callee = CGCallee::forVirtual (CE, GD, This, Ty);
20242020
20252021 ASTContext &Context = getContext ();
2026- llvm::Value *ImplicitParam = llvm::ConstantInt::get (
2027- llvm::IntegerType::getInt32Ty (CGF.getLLVMContext ()),
2028- 2 * (ArrayDeletion) + (DtorType == Dtor_Deleting));
2022+ uint32_t Flags = ((D && D->isArrayForm ()) << 1 ) | (DtorType == Dtor_Deleting);
2023+ llvm::Value *ImplicitParam = CGF.Builder .getInt32 (Flags);
20292024
20302025 QualType ThisTy;
20312026 if (CE) {
@@ -4067,14 +4062,13 @@ void MicrosoftCXXABI::emitCXXStructor(GlobalDecl GD) {
40674062
40684063 if (GD.getDtorType () == Dtor_VectorDeleting &&
40694064 !CGM.classNeedsVectorDestructor (dtor->getParent ())) {
4070- // Create GlobalDecl objects with the correct type for the vector and scalar
4071- // deleting destructors.
4072- GlobalDecl VectorDtorGD (dtor, Dtor_VectorDeleting);
4065+ // Create GlobalDecl object with the correct type for the scalar
4066+ // deleting destructor.
40734067 GlobalDecl ScalarDtorGD (dtor, Dtor_Deleting);
40744068
40754069 // Emit an alias from the vector deleting destructor to the scalar deleting
40764070 // destructor.
4077- CGM.EmitDefinitionAsAlias (VectorDtorGD , ScalarDtorGD);
4071+ CGM.EmitDefinitionAsAlias (GD , ScalarDtorGD);
40784072 return ;
40794073 }
40804074
0 commit comments