Mercurial > projects > ldc
diff gen/statements.cpp @ 311:9967a3270837 trunk
[svn r332] Fix codegen for continue within switch.
author | ChristianK |
---|---|
date | Sat, 28 Jun 2008 18:37:27 +0200 |
parents | d59c363fccad |
children | 8d98e42ece93 |
line wrap: on
line diff
--- a/gen/statements.cpp Sat Jun 28 11:50:28 2008 +0200 +++ b/gen/statements.cpp Sat Jun 28 18:37:27 2008 +0200 @@ -458,8 +458,15 @@ assert(0); } else { - DtoEnclosingHandlers(enclosinghandler, gIR->loopbbs.back().enclosinghandler); - llvm::BranchInst::Create(gIR->loopbbs.back().begin, gIR->scopebb()); + // can't 'continue' within switch, so omit them + IRState::LoopScopeVec::reverse_iterator it; + for(it = gIR->loopbbs.rbegin(); it != gIR->loopbbs.rend(); ++it) { + if(!it->isSwitch) { + break; + } + } + DtoEnclosingHandlers(enclosinghandler, it->enclosinghandler); + llvm::BranchInst::Create(it->begin, gIR->scopebb()); } } @@ -757,7 +764,7 @@ assert(body); p->scope() = IRScope(bodybb, endbb); - p->loopbbs.push_back(IRLoopScope(this,enclosinghandler,p->scopebb(),endbb)); + p->loopbbs.push_back(IRLoopScope(this,enclosinghandler,p->scopebb(),endbb,true)); body->toIR(p); p->loopbbs.pop_back();