X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Flower%2Flower_switch.c;h=ed1f294f05ea3cbf6b134c06f0b741450f003c00;hb=3e889332cb054e5cee1a12bba6dd0209121100cf;hp=2d4e2140c8994f33dc1b3b6df10e81d7f6bacf6f;hpb=6e5fd745c70d70f56fbe65df64983675897eb304;p=libfirm diff --git a/ir/lower/lower_switch.c b/ir/lower/lower_switch.c index 2d4e2140c..ed1f294f0 100644 --- a/ir/lower/lower_switch.c +++ b/ir/lower/lower_switch.c @@ -98,8 +98,8 @@ static void analyse_switch(cond_env_t *env, ir_node *cond) static int casecmp(const void *a, const void *b) { - const case_data_t *cda = a; - const case_data_t *cdb = b; + const case_data_t *cda = (const case_data_t*)a; + const case_data_t *cdb = (const case_data_t*)b; /* * Enforce unsigned sorting. Signed comparison will behave differently for @@ -139,7 +139,7 @@ static void create_if_cascade(cond_env_t *env, dbg_info *dbgi, ir_node *block, if (numcases == 0) { /* zero cases: "goto default;" */ - ARR_APP1(ir_node*, env->defusers, new_Jmp()); + ARR_APP1(ir_node*, env->defusers, new_r_Jmp(block)); } else if (numcases == 1) { /* only one case: "if (sel == val) goto target else goto default;" */ ir_node *val = new_r_Const_long(irg, cmp_mode, curcases[0].value); @@ -235,6 +235,7 @@ static void create_out_of_bounds_check(cond_env_t *env, ir_node *cond) delta = env->switch_min; env->switch_min = 0; env->switch_max -= delta; + set_Cond_selector(cond, sel); } /* check for out-of-bounds */ @@ -298,7 +299,7 @@ static void create_out_of_bounds_check(cond_env_t *env, ir_node *cond) */ static void find_cond_nodes(ir_node *block, void *ctx) { - walk_env_t *env = ctx; + walk_env_t *env = (walk_env_t *)ctx; ir_node *projx; ir_node *cond; ir_node *sel;