Don't use a cookie if the global placement new function is used.

llvm-svn: 91251
This commit is contained in:
Anders Carlsson 2009-12-13 20:34:34 +00:00
parent 8c17e6de2b
commit 399f499f0c
1 changed files with 13 additions and 1 deletions

View File

@ -64,6 +64,19 @@ static uint64_t CalculateCookiePadding(ASTContext &Ctx, const CXXNewExpr *E) {
if (!E->isArray())
return 0;
// No cookie is required if the new operator being used is
// ::operator new[](size_t, void*).
const FunctionDecl *OperatorNew = E->getOperatorNew();
if (OperatorNew->getDeclContext()->getLookupContext()->isFileContext()) {
if (OperatorNew->getNumParams() == 2) {
CanQualType ParamType =
Ctx.getCanonicalType(OperatorNew->getParamDecl(1)->getType());
if (ParamType == Ctx.VoidPtrTy)
return 0;
}
}
return CalculateCookiePadding(Ctx, E->getAllocatedType());
QualType T = E->getAllocatedType();
}
@ -265,7 +278,6 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
return NewPtr;
}
static std::pair<llvm::Value *, llvm::Value *>
GetAllocatedObjectPtrAndNumElements(CodeGenFunction &CGF,
llvm::Value *Ptr, QualType DeleteTy) {