if (const ArrayType *AT = dyn_cast<ArrayType>(AI->getAllocatedType()))
// If an array has more than SSPBufferSize bytes of allocated space,
// then we emit stack protectors.
- if (SSPBufferSize <= TD->getABITypeSize(AT))
+ if (SSPBufferSize <= TD->getTypeAllocSize(AT))
return true;
}
}
Value *Args[] = { LI, AI };
CallInst::
- Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector_create),
+ Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector),
&Args[0], array_endof(Args), "", InsPt);
// Create the basic block to jump to when the guard check fails.
// Split the basic block before the return instruction.
BasicBlock *NewBB = BB->splitBasicBlock(RI, "SP_return");
+ // Remove default branch instruction to the new BB.
+ BB->getTerminator()->eraseFromParent();
+
// Move the newly created basic block to the point right after the old basic
// block so that it's in the "fall through" position.
NewBB->moveAfter(BB);