From: Duncan P. N. Exon Smith Date: Wed, 17 Aug 2016 03:15:29 +0000 (+0000) Subject: CodeGen: Avoid dereferencing end() in ScalarExprEmitter::EmitOverflowCheckedBinOp X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1802c44dd4ae1f9abb99ba7746c9eccdc9ef59c8;p=clang CodeGen: Avoid dereferencing end() in ScalarExprEmitter::EmitOverflowCheckedBinOp Use BB.getNextNode(), which returns nullptr on end(), instead of &*BB.getIterator(), which is UB on end(). CodeGenFunction::createBasicBlock expects nullptr in this case already. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278898 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 700b5374ad..ba7f49b750 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -2371,9 +2371,8 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { // Branch in case of overflow. llvm::BasicBlock *initialBB = Builder.GetInsertBlock(); - llvm::Function::iterator insertPt = initialBB->getIterator(); - llvm::BasicBlock *continueBB = CGF.createBasicBlock("nooverflow", CGF.CurFn, - &*std::next(insertPt)); + llvm::BasicBlock *continueBB = + CGF.createBasicBlock("nooverflow", CGF.CurFn, initialBB->getNextNode()); llvm::BasicBlock *overflowBB = CGF.createBasicBlock("overflow", CGF.CurFn); Builder.CreateCondBr(overflow, overflowBB, continueBB);