From 0de539868e6e0de9ff70cc81e78d259bdfcf2e0b Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Sun, 5 Oct 2008 22:26:25 +0200 Subject: [PATCH] Fix TryFinally without body or finalbody. --- gen/statements.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gen/statements.cpp b/gen/statements.cpp index 3a8a06e4..95e8bb8f 100644 --- a/gen/statements.cpp +++ b/gen/statements.cpp @@ -511,6 +511,17 @@ void TryFinallyStatement::toIR(IRState* p) if (global.params.symdebug) DtoDwarfStopPoint(loc.linnum); + // if there's no finalbody or no body, things are simple + if (!finalbody) { + if (body) + body->toIR(p); + return; + } + if (!body) { + finalbody->toIR(p); + return; + } + // create basic blocks llvm::BasicBlock* oldend = p->scopeend(); @@ -529,6 +540,7 @@ void TryFinallyStatement::toIR(IRState* p) // p->scope() = IRScope(landingpadbb, endbb); + assert(finalbody); gIR->func()->landingPad.addFinally(finalbody); gIR->func()->landingPad.push(landingpadbb); @@ -550,7 +562,6 @@ void TryFinallyStatement::toIR(IRState* p) // do finally block // p->scope() = IRScope(finallybb,landingpadbb); - assert(finalbody); finalbody->toIR(p); // terminate finally