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
clang/lib/CodeGen

View File

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