From 915c002be42451f13c3f665cffcd4bf0f8b3e085 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Thu, 20 Dec 2012 16:20:08 +0100 Subject: [PATCH] Temporarily fix noreturn bug by creating an actual dummy return instruction after the call for now --- ir.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ir.c b/ir.c index 5161108..30cdda9 100644 --- a/ir.c +++ b/ir.c @@ -1586,10 +1586,12 @@ ir_instr* ir_block_create_call(ir_block *self, lex_ctx ctx, const char *label, i in = ir_instr_new(ctx, self, (noreturn ? VINSTR_NRCALL : INSTR_CALL0)); if (!in) return NULL; + /* if (noreturn) { self->final = true; self->is_return = true; } + */ out = ir_value_out(self->owner, label, (func->outtype == TYPE_VOID) ? store_return : store_value, func->outtype); if (!out) { ir_instr_delete(in); @@ -1603,6 +1605,13 @@ ir_instr* ir_block_create_call(ir_block *self, lex_ctx ctx, const char *label, i return NULL; } vec_push(self->instr, in); + if (noreturn) { + if (!ir_block_create_return(self, ctx, NULL)) { + compile_error(ctx, "internal error: failed to generate dummy-return instruction"); + ir_instr_delete(in); + return NULL; + } + } return in; } -- 2.39.2