From f621a5a77bf667925bcfd3c09bb86fbb9e0e25f6 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 24 Jun 2008 17:24:55 +0200 Subject: [PATCH] [svn r319] Call substatement->toIR in LabelStatement::toIR even when the label is inside an asm block. --- gen/statements.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/gen/statements.cpp b/gen/statements.cpp index 6ac56d8f..fa1bbf74 100644 --- a/gen/statements.cpp +++ b/gen/statements.cpp @@ -1070,21 +1070,24 @@ void LabelStatement::toIR(IRState* p) a->code += ident->toChars(); a->code += ":"; p->asmBlock->s.push_back(a); - return; + } + else + { + + assert(tf == NULL); + + llvm::BasicBlock* oldend = gIR->scopeend(); + if (llvmBB) + llvmBB->moveBefore(oldend); + else + llvmBB = llvm::BasicBlock::Create("label", p->topfunc(), oldend); + + if (!p->scopereturned()) + llvm::BranchInst::Create(llvmBB, p->scopebb()); + + p->scope() = IRScope(llvmBB,oldend); } - assert(tf == NULL); - - llvm::BasicBlock* oldend = gIR->scopeend(); - if (llvmBB) - llvmBB->moveBefore(oldend); - else - llvmBB = llvm::BasicBlock::Create("label", p->topfunc(), oldend); - - if (!p->scopereturned()) - llvm::BranchInst::Create(llvmBB, p->scopebb()); - - p->scope() = IRScope(llvmBB,oldend); if (statement) statement->toIR(p); }