diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 5 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 2 |
3 files changed, 10 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f7565153e24..b110b8ef50b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2004-11-04 Kazu Hirata <kazu@cs.umass.edu> + * tree-cfg.c (find_taken_edge): Reject VAL begin NULL. + * tree-ssa-ccp.c (visit_cond_stmt): Don't call find_taken_edge + with VAL being NULL. + +2004-11-04 Kazu Hirata <kazu@cs.umass.edu> + * cfghooks.c (delete_basic_block): Remove code to truncate edge vectors. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 3c8a505815f..67b96a5737d 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -1954,15 +1954,16 @@ find_taken_edge (basic_block bb, tree val) gcc_assert (stmt); gcc_assert (is_ctrl_stmt (stmt)); + gcc_assert (val); /* If VAL is a predicate of the form N RELOP N, where N is an SSA_NAME, we can usually determine its truth value. */ - if (val && COMPARISON_CLASS_P (val)) + if (COMPARISON_CLASS_P (val)) val = fold (val); /* If VAL is not a constant, we can't determine which edge might be taken. */ - if (val == NULL || !really_constant_p (val)) + if (!really_constant_p (val)) return NULL; if (TREE_CODE (stmt) == COND_EXPR) diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index b97424f02e2..42094805b41 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1123,7 +1123,7 @@ visit_cond_stmt (tree stmt, edge *taken_edge_p) to the worklist. If no single edge can be determined statically, return SSA_PROP_VARYING to feed all the outgoing edges to the propagation engine. */ - *taken_edge_p = find_taken_edge (block, val.const_val); + *taken_edge_p = val.const_val ? find_taken_edge (block, val.const_val) : 0; if (*taken_edge_p) return SSA_PROP_INTERESTING; else |