Temporarily fix noreturn bug by creating an actual dummy return instruction after the call for now

This commit is contained in:
Wolfgang Bumiller 2012-12-20 16:20:08 +01:00
parent 4ef0e8c66e
commit 915c002be4

9
ir.c
View file

@ -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;
}