do not use new_Bad(), as this depends on current_ir_graph, cast
[libfirm] / ir / ir / irvrfy.c
index dcecff8..a3586e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1995-2007 University of Karlsruhe.  All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
  *
  * This file is part of libFirm.
  *
@@ -277,11 +277,15 @@ static void show_phi_inputs(ir_node *phi, ir_node *block) {
 
 #endif /* #ifndef NDEBUG */
 
-/** If the address is Sel or SymConst, return the entity. */
+/**
+ * If the address is Sel or SymConst, return the entity.
+ *
+ * @param ptr  the node representing the address
+ */
 static ir_entity *get_ptr_entity(ir_node *ptr) {
        if (get_irn_op(ptr) == op_Sel) {
                return get_Sel_entity(ptr);
-       } else if ((get_irn_op(ptr) == op_SymConst) && (get_SymConst_kind(ptr) == symconst_addr_ent)) {
+       } else if (is_SymConst_addr_ent(ptr)) {
                return get_SymConst_entity(ptr);
        }
        return NULL;
@@ -388,6 +392,7 @@ static int verify_node_Proj_Call(ir_node *n, ir_node *p) {
                "wrong Proj from Call", 0,
                show_proj_failure(p);
        );
+       /* if we have exception flow, we must have a real Memory input */
        if (proj == pn_Call_X_regular)
                ASSERT_AND_RET(
                        get_irn_op(get_Call_mem(n)) != op_NoMem,
@@ -545,6 +550,11 @@ static int verify_node_Proj_Cmp(ir_node *n, ir_node *p) {
                "wrong Proj from Cmp", 0,
                show_proj_failure(p);
        );
+       ASSERT_AND_RET_DBG(
+               (mode_is_float(get_irn_mode(get_Cmp_left(n))) || !(proj & pn_Cmp_Uo)),
+               "unordered Proj for non-float Cmp", 0,
+               show_proj_failure(p);
+       );
        return 1;
 }
 
@@ -1169,14 +1179,17 @@ static int verify_node_Call(ir_node *n, ir_graph *irg) {
                        get_Call_n_params(n) >= get_method_n_params(mt),
                        "Number of args for Call doesn't match number of args in variadic type.",
                        0,
-                       fprintf(stderr, "Call has %d params, method %s type %d\n",
-                       get_Call_n_params(n), get_type_name(mt), get_method_n_params(mt));
+                       ir_fprintf(stderr, "Call %+F has %d params, method %s type %d\n",
+                       n, get_Call_n_params(n), get_type_name(mt), get_method_n_params(mt));
                );
        } else {
-               ASSERT_AND_RET(
+               ASSERT_AND_RET_DBG(
                        get_Call_n_params(n) == get_method_n_params(mt),
                        "Number of args for Call doesn't match number of args in non variadic type.",
-                       0);
+                       0,
+                       ir_fprintf(stderr, "Call %+F has %d params, method %s type %d\n",
+                       n, get_Call_n_params(n), get_type_name(mt), get_method_n_params(mt));
+               );
        }
 
        for (i = 0; i < get_method_n_params(mt); i++) {
@@ -2093,7 +2106,7 @@ static void check_bads(ir_node *node, void *env) {
                                                fprintf(stderr, "irg_vrfy_bads: Block %ld has Bad predecessor\n", get_irn_node_nr(node));
                                        }
                                        if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                               dump_ir_block_graph(current_ir_graph, "-assert");
+                                               dump_ir_block_graph_sched(current_ir_graph, "-assert");
                                                assert(0 && "Bad CF detected");
                                        }
                                }
@@ -2110,7 +2123,7 @@ static void check_bads(ir_node *node, void *env) {
                                        fprintf(stderr, "irg_vrfy_bads: node %ld has Bad Block\n", get_irn_node_nr(node));
                                }
                                if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                       dump_ir_block_graph(current_ir_graph, "-assert");
+                                       dump_ir_block_graph_sched(current_ir_graph, "-assert");
                                        assert(0 && "Bad CF detected");
                                }
                        }
@@ -2124,7 +2137,7 @@ static void check_bads(ir_node *node, void *env) {
                                        fprintf(stderr, "irg_vrfy_bads: node %ld is a Tuple\n", get_irn_node_nr(node));
                                }
                                if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                       dump_ir_block_graph(current_ir_graph, "-assert");
+                                       dump_ir_block_graph_sched(current_ir_graph, "-assert");
                                        assert(0 && "Tuple detected");
                                }
                        }
@@ -2145,7 +2158,7 @@ static void check_bads(ir_node *node, void *env) {
                                                        fprintf(stderr, "irg_vrfy_bads: Phi %ld has Bad Input\n", get_irn_node_nr(node));
                                                }
                                                if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                                       dump_ir_block_graph(current_ir_graph, "-assert");
+                                                       dump_ir_block_graph_sched(current_ir_graph, "-assert");
                                                        assert(0 && "Bad CF detected");
                                                }
                                        }
@@ -2159,7 +2172,7 @@ static void check_bads(ir_node *node, void *env) {
                                                fprintf(stderr, "irg_vrfy_bads: node %ld has Bad Input\n", get_irn_node_nr(node));
                                        }
                                        if (get_node_verification_mode() == FIRM_VERIFICATION_ON) {
-                                               dump_ir_block_graph(current_ir_graph, "-assert");
+                                               dump_ir_block_graph_sched(current_ir_graph, "-assert");
                                                assert(0 && "Bad NON-CF detected");
                                        }
                                }