Handle delete where the class has a virtual destructor.

llvm-svn: 81733
This commit is contained in:
Anders Carlsson 2009-09-14 00:16:25 +00:00
parent 125f8fb761
commit 8783737029
1 changed files with 8 additions and 5 deletions

View File

@ -608,11 +608,14 @@ void CodeGenFunction::EmitCXXDeleteExpr(const CXXDeleteExpr *E) {
if (!RD->hasTrivialDestructor()) {
const CXXDestructorDecl *Dtor = RD->getDestructor(getContext());
if (Dtor->isVirtual()) {
ErrorUnsupported(E, "delete expression with virtual destructor");
return;
}
EmitCXXDestructorCall(Dtor, Dtor_Complete, Ptr);
const llvm::Type *Ty =
CGM.getTypes().GetFunctionType(CGM.getTypes().getFunctionInfo(Dtor),
/*isVariadic=*/false);
llvm::Value *Callee = BuildVirtualCall(Dtor, Ptr, Ty);
EmitCXXMemberCall(Dtor, Callee, Ptr, 0, 0);
} else
EmitCXXDestructorCall(Dtor, Dtor_Complete, Ptr);
}
}
}