aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linearize.c
diff options
Diffstat (limited to 'linearize.c')
-rw-r--r--linearize.c11
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);