diff options
Diffstat (limited to 'linearize.c')
| -rw-r--r-- | linearize.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/linearize.c b/linearize.c index a56c272f..3e7d4d9e 100644 --- a/linearize.c +++ b/linearize.c @@ -2177,13 +2177,14 @@ static pseudo_t linearize_switch(struct entrypoint *ep, struct statement *stmt) struct multijmp *jmp; pseudo_t pseudo; + if (!expr || !expr->ctype) + return VOID; pseudo = linearize_expression(ep, expr); - if (pseudo == VOID) - return pseudo; - active = ep->active; - if (!bb_reachable(active)) - return VOID; + if (!active) { + active = alloc_basic_block(ep, stmt->pos); + set_activeblock(ep, active); + } switch_ins = alloc_typed_instruction(OP_SWITCH, expr->ctype); use_pseudo(switch_ins, pseudo, &switch_ins->cond); |
