From 7205677a46d02867004826218942dab3b466c926 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Mon, 10 Nov 2008 21:13:10 +0000 Subject: [PATCH] - Make sure that we don't over-increment the iterator when going through the basic blocks. - Minor code clean-up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59002 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/StackProtector.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/CodeGen/StackProtector.cpp b/lib/CodeGen/StackProtector.cpp index 19fd45cbac0..386c7cd162a 100644 --- a/lib/CodeGen/StackProtector.cpp +++ b/lib/CodeGen/StackProtector.cpp @@ -123,14 +123,11 @@ bool StackProtector::InsertStackProtectors() { AllocaInst *AI = 0; // Place on stack that stores the stack guard. Constant *StackGuardVar = 0; // The stack guard variable. - for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) { + for (Function::iterator I = F->begin(), E = F->end(); I != E; ) { BasicBlock *BB = I; - if (isa(BB->getTerminator())) { + if (ReturnInst *RI = dyn_cast(BB->getTerminator())) { if (!FailBB) { - // Create the basic block to jump to when the guard check fails. - FailBB = CreateFailBB(); - // Insert code into the entry block that stores the __stack_chk_guard // variable onto the stack. PointerType *PtrTy = PointerType::getUnqual(Type::Int8Ty); @@ -146,11 +143,13 @@ bool StackProtector::InsertStackProtectors() { CallInst:: Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector_create), &Args[0], array_endof(Args), "", InsPt); + + // Create the basic block to jump to when the guard check fails. + FailBB = CreateFailBB(); } - ReturnInst *RI = cast(BB->getTerminator()); Function::iterator InsPt = BB; ++InsPt; // Insertion point for new BB. - ++I; + ++I; // Skip to the next block so that we don't resplit the return block. // Split the basic block before the return instruction. BasicBlock *NewBB = BB->splitBasicBlock(RI, "SP_return"); @@ -167,6 +166,8 @@ bool StackProtector::InsertStackProtectors() { AI, "", BB); ICmpInst *Cmp = new ICmpInst(CmpInst::ICMP_EQ, CI, LI1, "", BB); BranchInst::Create(NewBB, FailBB, Cmp, BB); + } else { + ++I; } } -- 2.34.1