forked from OSchip/llvm-project
remove code to add bound checks for simple array accesses, since those are already covered by the check with the objectsize builtin
remove the comparison of objectsize with -1. since it's an unsigned comparison, it will always succeed if objectsize returns -1, which is enough to have the check removed llvm-svn: 156311
This commit is contained in:
parent
41e7ab8f81
commit
f463abc0e7
|
@ -525,15 +525,9 @@ void CodeGenFunction::EmitCheck(llvm::Value *Address, unsigned Size) {
|
|||
|
||||
llvm::Value *F = CGM.getIntrinsic(llvm::Intrinsic::objectsize, IntPtrTy);
|
||||
|
||||
// In time, people may want to control this and use a 1 here.
|
||||
llvm::Value *Arg = Builder.getFalse();
|
||||
llvm::Value *C = Builder.CreateCall2(F, Address, Arg);
|
||||
llvm::BasicBlock *Cont = createBasicBlock();
|
||||
llvm::BasicBlock *Check = createBasicBlock();
|
||||
llvm::Value *NegativeOne = llvm::ConstantInt::get(IntPtrTy, -1ULL);
|
||||
Builder.CreateCondBr(Builder.CreateICmpEQ(C, NegativeOne), Cont, Check);
|
||||
|
||||
EmitBlock(Check);
|
||||
Builder.CreateCondBr(Builder.CreateICmpUGE(C,
|
||||
llvm::ConstantInt::get(IntPtrTy, Size)),
|
||||
Cont, getTrapBB());
|
||||
|
@ -1792,25 +1786,6 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) {
|
|||
// Extend or truncate the index type to 32 or 64-bits.
|
||||
if (Idx->getType() != IntPtrTy)
|
||||
Idx = Builder.CreateIntCast(Idx, IntPtrTy, IdxSigned, "idxprom");
|
||||
|
||||
// FIXME: As llvm implements the object size checking, this can come out.
|
||||
if (CatchUndefined) {
|
||||
if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E->getBase())){
|
||||
if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(ICE->getSubExpr())) {
|
||||
if (ICE->getCastKind() == CK_ArrayToPointerDecay) {
|
||||
if (const ConstantArrayType *CAT
|
||||
= getContext().getAsConstantArrayType(DRE->getType())) {
|
||||
llvm::APInt Size = CAT->getSize();
|
||||
llvm::BasicBlock *Cont = createBasicBlock("cont");
|
||||
Builder.CreateCondBr(Builder.CreateICmpULE(Idx,
|
||||
llvm::ConstantInt::get(Idx->getType(), Size)),
|
||||
Cont, getTrapBB());
|
||||
EmitBlock(Cont);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We know that the pointer points to a type of the correct size, unless the
|
||||
// size is a VLA or Objective-C interface.
|
||||
|
|
Loading…
Reference in New Issue