From 29ac59f25cae74970570bea70f626bf8cd13fb08 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 11 Nov 2008 04:34:23 +0000 Subject: [PATCH] Add CodeGenFunction::EmitDummyBlock for marking places where we make "dummy" blocks (blocks just used to make sure we have a place to dump code to). llvm-svn: 59022 --- clang/lib/CodeGen/CGObjCMac.cpp | 2 +- clang/lib/CodeGen/CGStmt.cpp | 16 ++++++++++------ clang/lib/CodeGen/CodeGenFunction.h | 5 +++++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp index 34f995225285..903e92dfc2df 100644 --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -1717,7 +1717,7 @@ void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF, CGF.Builder.CreateCall(ObjCTypes.ExceptionThrowFn, ExceptionAsObject); CGF.Builder.CreateUnreachable(); - CGF.EmitBlock(CGF.createBasicBlock("bb")); + CGF.EmitDummyBlock(); } void CodeGenFunction::EmitJumpThroughFinally(ObjCEHEntry *E, diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index 9d6a79b58429..82c39208a42a 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -167,6 +167,10 @@ void CodeGenFunction::EmitBlock(llvm::BasicBlock *BB) { Builder.SetInsertPoint(BB); } +void CodeGenFunction::EmitDummyBlock() { + EmitBlock(createBasicBlock()); +} + void CodeGenFunction::EmitLabel(const LabelStmt &S) { llvm::BasicBlock *NextBB = getBasicBlockForLabel(&S); EmitBlock(NextBB); @@ -189,7 +193,7 @@ void CodeGenFunction::EmitGotoStmt(const GotoStmt &S) { // Emit a block after the branch so that dead code after a goto has some place // to go. - Builder.SetInsertPoint(createBasicBlock("", CurFn)); + EmitDummyBlock(); } void CodeGenFunction::EmitIndirectGotoStmt(const IndirectGotoStmt &S) { @@ -210,7 +214,7 @@ void CodeGenFunction::EmitIndirectGotoStmt(const IndirectGotoStmt &S) { // Emit a block after the branch so that dead code after a goto has some place // to go. - Builder.SetInsertPoint(createBasicBlock("", CurFn)); + EmitDummyBlock(); } void CodeGenFunction::EmitIfStmt(const IfStmt &S) { @@ -433,7 +437,7 @@ void CodeGenFunction::EmitReturnOfRValue(RValue RV, QualType Ty) { // Emit a block after the branch so that dead code after a return has some // place to go. - EmitBlock(createBasicBlock()); + EmitDummyBlock(); } /// EmitReturnStmt - Note that due to GCC extensions, this can have an operand @@ -473,7 +477,7 @@ void CodeGenFunction::EmitReturnStmt(const ReturnStmt &S) { // Emit a block after the branch so that dead code after a return has some // place to go. - EmitBlock(createBasicBlock()); + EmitDummyBlock(); } void CodeGenFunction::EmitDeclStmt(const DeclStmt &S) { @@ -487,7 +491,7 @@ void CodeGenFunction::EmitBreakStmt() { llvm::BasicBlock *Block = BreakContinueStack.back().BreakBlock; Builder.CreateBr(Block); - EmitBlock(createBasicBlock()); + EmitDummyBlock(); } void CodeGenFunction::EmitContinueStmt() { @@ -495,7 +499,7 @@ void CodeGenFunction::EmitContinueStmt() { llvm::BasicBlock *Block = BreakContinueStack.back().ContinueBlock; Builder.CreateBr(Block); - EmitBlock(createBasicBlock()); + EmitDummyBlock(); } /// EmitCaseStmtRange - If case statement range is not too big then diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index c9dcaa7d5502..a454cece4053 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -225,6 +225,11 @@ public: llvm::BasicBlock *getBasicBlockForLabel(const LabelStmt *S); void EmitBlock(llvm::BasicBlock *BB); + + /// EmitDummyBlock - Emit a new block which will never be branched + /// to. This is used to satisfy the invariant that codegen always + /// has an active unterminated block to dump code into. + void EmitDummyBlock(); /// ErrorUnsupported - Print out an error that codegen doesn't support the /// specified stmt yet.