Reenable asserts
[libfirm] / ir / ana / irouts.c
index d1555c3..d2ff583 100644 (file)
@@ -68,7 +68,7 @@ int get_irn_n_outs(const ir_node *node)
 {
        assert(node && node->kind == k_ir_node);
 #ifdef DEBUG_libfirm
-       /* assert(node->out_valid); */
+       assert(node->out_valid);
 #endif /* defined DEBUG_libfirm */
        /* we misuse the first for the size info of the out array */
        return node->out[0].pos;
@@ -79,7 +79,7 @@ ir_node *get_irn_out(const ir_node *def, int pos)
 {
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
-       /* assert(def->out_valid); */
+       assert(def->out_valid);
 #endif /* defined DEBUG_libfirm */
        return def->out[pos+1].use;
 }
@@ -89,7 +89,7 @@ ir_node *get_irn_out_ex(const ir_node *def, int pos, int *in_pos)
 {
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
-       /* assert(def->out_valid); */
+       assert(def->out_valid);
 #endif /* defined DEBUG_libfirm */
        *in_pos = def->out[pos+1].pos;
        return def->out[pos+1].use;
@@ -100,7 +100,7 @@ void set_irn_out(ir_node *def, int pos, ir_node *use, int in_pos)
        assert(def && use);
        assert(pos >= 0 && pos < get_irn_n_outs(def));
 #ifdef DEBUG_libfirm
-       def->out_valid = 1;          /* assume that this function is used correctly */
+       assert(def->out_valid);
 #endif /* defined DEBUG_libfirm */
        def->out[pos+1].use = use;
        def->out[pos+1].pos = in_pos;
@@ -116,7 +116,7 @@ int get_Block_n_cfg_outs(const ir_node *bl)
 #endif /* defined DEBUG_libfirm */
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
-               if (get_irn_mode(succ) == mode_X && !is_End(succ))
+               if (get_irn_mode(succ) == mode_X && !is_End(succ) && !is_Bad(succ))
                        n_cfg_outs += succ->out[0].pos;
        }
        return n_cfg_outs;
@@ -133,7 +133,8 @@ int get_Block_n_cfg_outs_ka(const ir_node *bl)
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
                if (get_irn_mode(succ) == mode_X) {
-
+                       if (is_Bad(succ))
+                               continue;
                        if (is_End(succ)) {
                                /* ignore End if we are in the Endblock */
                                if (get_nodes_block(succ) == bl)
@@ -157,7 +158,7 @@ ir_node *get_Block_cfg_out(const ir_node *bl, int pos)
 #endif /* defined DEBUG_libfirm */
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
-               if (get_irn_mode(succ) == mode_X && !is_End(succ)) {
+               if (get_irn_mode(succ) == mode_X && !is_End(succ) && !is_Bad(succ)) {
                        int n_outs = succ->out[0].pos;
                        if (pos < n_outs)
                                return succ->out[pos + 1].use;
@@ -179,6 +180,8 @@ ir_node *get_Block_cfg_out_ka(const ir_node *bl, int pos)
        for (i = 1; i <= bl->out[0].pos; ++i) {
                ir_node *succ = bl->out[i].use;
                if (get_irn_mode(succ) == mode_X) {
+                       if (is_Bad(succ))
+                               continue;
                        if (is_End(succ)) {
                                ir_node *end_bl = get_nodes_block(succ);
                                if (end_bl == bl) {
@@ -257,7 +260,7 @@ static void irg_out_block_walk2(ir_node *bl, irg_walk_func *pre,
        }
 }
 
-/* Walks only over Block nodes in the graph.  Has it's own visited
+/* Walks only over Block nodes in the graph.  Has its own visited
    flag, so that it can be interleaved with the other walker.         */
 void irg_out_block_walk(ir_node *node, irg_walk_func *pre, irg_walk_func *post,
                         void *env)
@@ -479,15 +482,15 @@ void assure_irg_outs(ir_graph *irg)
 
 void compute_irp_outs(void)
 {
-       int i;
-       for (i = get_irp_n_irgs() -1; i >= 0; --i)
+       size_t i, n;
+       for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
                compute_irg_outs(get_irp_irg(i));
 }
 
 void free_irp_outs(void)
 {
-       int i;
-       for (i = get_irp_n_irgs() -1; i >= 0; --i)
+       size_t i, n;
+       for (i = 0, n = get_irp_n_irgs(); i < n; ++i)
                free_irg_outs(get_irp_irg(i));
 }