- BugFix: the end block might be unreachable, check this first
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 17 Mar 2009 15:44:17 +0000 (15:44 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Tue, 17 Mar 2009 15:44:17 +0000 (15:44 +0000)
[r25700]

ir/opt/opt_ldst.c

index 0ca5dec..b2e4306 100644 (file)
@@ -1858,11 +1858,19 @@ static int insert_Load(block_t *bl) {
        unsigned pos = 0;
        unsigned end = env.rbs_size - 1;
        int      res = 0;
-       ir_node  *pred    = get_Block_cfgpred_block(bl->block, 0);
-       block_t  *pred_bl = get_block_entry(pred);
+       ir_node  *pred;
+       block_t  *pred_bl;
 
        DB((dbg, LEVEL_3, "processing %+F\n", block));
 
+       if (n == 0) {
+               /* might still happen for an unreachable block (end for instance) */
+               return res;
+       }
+
+       pred    = get_Block_cfgpred_block(bl->block, 0);
+       pred_bl = get_block_entry(pred);
+
        rbitset_cpy(env.curr_set, pred_bl->avail_out, env.rbs_size);
 
        if (n > 1) {