From: Wolfgang Bumiller Date: Thu, 20 Dec 2012 15:20:08 +0000 (+0100) Subject: Temporarily fix noreturn bug by creating an actual dummy return instruction after... X-Git-Tag: 0.1.9~8 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=915c002be42451f13c3f665cffcd4bf0f8b3e085;p=xonotic%2Fgmqcc.git Temporarily fix noreturn bug by creating an actual dummy return instruction after the call for now --- 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; }