summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-04-30 08:06:49 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-04-30 08:06:49 +0000
commit71b659391e5b4986ec497e8aea59d7d72bd5d286 (patch)
tree89764a65392e04dc94709cea493bd321464376f5
parent52cc0072c63dabca1e6ce6d9074dd320c2bd7941 (diff)
downloadgcc-71b659391e5b4986ec497e8aea59d7d72bd5d286.tar.gz
2014-04-30 Richard Biener <rguenther@suse.de>
* passes.c (execute_function_todo): Move TODO_verify_stmts and TODO_verify_ssa under the TODO_verify_il umbrella. * tree-ssa.h (verify_ssa): Adjust prototype. * tree-ssa.c (verify_ssa): Add parameter to tell whether we should verify SSA operands. * tree-cfg.h (verify_gimple_in_cfg): Adjust prototype. * tree-cfg.c (verify_gimple_in_cfg): Add parameter to tell whether we should verify whether not throwing stmts have EH info. * graphite-scop-detection.c (create_sese_edges): Adjust. * tree-ssa-loop-manip.c (verify_loop_closed_ssa): Likewise. * tree-eh.c (lower_try_finally_switch): Do not add the default case label twice. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209928 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/graphite-scop-detection.c2
-rw-r--r--gcc/passes.c30
-rw-r--r--gcc/tree-cfg.c15
-rw-r--r--gcc/tree-cfg.h2
-rw-r--r--gcc/tree-eh.c2
-rw-r--r--gcc/tree-ssa-loop-manip.c2
-rw-r--r--gcc/tree-ssa.c4
-rw-r--r--gcc/tree-ssa.h2
9 files changed, 48 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1bec6e12fa8..5b771ea4fc8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,18 @@
+2014-04-30 Richard Biener <rguenther@suse.de>
+
+ * passes.c (execute_function_todo): Move TODO_verify_stmts
+ and TODO_verify_ssa under the TODO_verify_il umbrella.
+ * tree-ssa.h (verify_ssa): Adjust prototype.
+ * tree-ssa.c (verify_ssa): Add parameter to tell whether
+ we should verify SSA operands.
+ * tree-cfg.h (verify_gimple_in_cfg): Adjust prototype.
+ * tree-cfg.c (verify_gimple_in_cfg): Add parameter to tell
+ whether we should verify whether not throwing stmts have EH info.
+ * graphite-scop-detection.c (create_sese_edges): Adjust.
+ * tree-ssa-loop-manip.c (verify_loop_closed_ssa): Likewise.
+ * tree-eh.c (lower_try_finally_switch): Do not add the
+ default case label twice.
+
2014-04-30 Marek Polacek <polacek@redhat.com>
* gcc.c (sanitize_spec_function): Handle SANITIZE_FLOAT_DIVIDE.
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index 635e21a8519..5d1c96e353d 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -1056,7 +1056,7 @@ create_sese_edges (vec<sd_region> regions)
#ifdef ENABLE_CHECKING
verify_loop_structure ();
- verify_ssa (false);
+ verify_ssa (false, true);
#endif
}
diff --git a/gcc/passes.c b/gcc/passes.c
index 7559a3ba3a1..dbff5875a5d 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -1716,6 +1716,7 @@ pass_manager::dump_profile_report () const
static void
execute_function_todo (function *fn, void *data)
{
+ bool from_ipa_pass = (cfun == NULL);
unsigned int flags = (size_t)data;
flags &= ~fn->last_verified;
if (!flags)
@@ -1767,26 +1768,29 @@ execute_function_todo (function *fn, void *data)
dom_state pre_verify_state = dom_info_state (fn, CDI_DOMINATORS);
dom_state pre_verify_pstate = dom_info_state (fn, CDI_POST_DOMINATORS);
- if (flags & TODO_verify_ssa)
+ if (flags & TODO_verify_il)
{
- verify_gimple_in_cfg (cfun);
- verify_ssa (true);
+ if (cfun->curr_properties & PROP_trees)
+ {
+ if (cfun->curr_properties & PROP_cfg)
+ /* IPA passes leave stmts to be fixed up, so make sure to
+ not verify stmts really throw. */
+ verify_gimple_in_cfg (cfun, !from_ipa_pass);
+ else
+ verify_gimple_in_seq (gimple_body (cfun->decl));
+ }
+ if (cfun->curr_properties & PROP_ssa)
+ /* IPA passes leave stmts to be fixed up, so make sure to
+ not verify SSA operands whose verifier will choke on that. */
+ verify_ssa (true, !from_ipa_pass);
}
- else if (flags & TODO_verify_stmts)
- verify_gimple_in_cfg (cfun);
if (flags & TODO_verify_flow)
verify_flow_info ();
if (flags & TODO_verify_il)
{
if (current_loops
&& loops_state_satisfies_p (LOOP_CLOSED_SSA))
- {
- if (!(flags & (TODO_verify_stmts|TODO_verify_ssa)))
- verify_gimple_in_cfg (cfun);
- if (!(flags & TODO_verify_ssa))
- verify_ssa (true);
- verify_loop_closed_ssa (false);
- }
+ verify_loop_closed_ssa (false);
}
if (flags & TODO_verify_rtl_sharing)
verify_rtl_sharing ();
@@ -1803,7 +1807,7 @@ execute_function_todo (function *fn, void *data)
/* For IPA passes make sure to release dominator info, it can be
computed by non-verifying TODOs. */
- if (!cfun)
+ if (from_ipa_pass)
{
free_dominance_info (fn, CDI_DOMINATORS);
free_dominance_info (fn, CDI_POST_DOMINATORS);
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index a5f09ea9d9e..1918679f1bf 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -4785,7 +4785,7 @@ collect_subblocks (pointer_set_t *blocks, tree block)
/* Verify the GIMPLE statements in the CFG of FN. */
DEBUG_FUNCTION void
-verify_gimple_in_cfg (struct function *fn)
+verify_gimple_in_cfg (struct function *fn, bool verify_nothrow)
{
basic_block bb;
bool err = false;
@@ -4921,16 +4921,17 @@ verify_gimple_in_cfg (struct function *fn)
that they cannot throw, that we update other data structures
to match. */
lp_nr = lookup_stmt_eh_lp (stmt);
- if (lp_nr != 0)
+ if (lp_nr > 0)
{
if (!stmt_could_throw_p (stmt))
{
- error ("statement marked for throw, but doesn%'t");
- err2 |= true;
+ if (verify_nothrow)
+ {
+ error ("statement marked for throw, but doesn%'t");
+ err2 |= true;
+ }
}
- else if (lp_nr > 0
- && !gsi_one_before_end_p (gsi)
- && stmt_can_throw_internal (stmt))
+ else if (!gsi_one_before_end_p (gsi))
{
error ("statement marked for throw in middle of block");
err2 |= true;
diff --git a/gcc/tree-cfg.h b/gcc/tree-cfg.h
index a115df58b9d..751d0a29e5a 100644
--- a/gcc/tree-cfg.h
+++ b/gcc/tree-cfg.h
@@ -58,7 +58,7 @@ extern gimple first_stmt (basic_block);
extern gimple last_stmt (basic_block);
extern gimple last_and_only_stmt (basic_block);
extern void verify_gimple_in_seq (gimple_seq);
-extern void verify_gimple_in_cfg (struct function *);
+extern void verify_gimple_in_cfg (struct function *, bool);
extern tree gimple_block_label (basic_block);
extern void add_phi_args_after_copy_bb (basic_block);
extern void add_phi_args_after_copy (basic_block *, unsigned, edge);
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index 960c04a14d0..7b65319f857 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -1550,6 +1550,8 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
/* Make sure that the last case is the default label, as one is required.
Then sort the labels, which is also required in GIMPLE. */
CASE_LOW (last_case) = NULL;
+ tree tem = case_label_vec.pop ();
+ gcc_assert (tem == last_case);
sort_case_labels (case_label_vec);
/* Build the switch statement, setting last_case to be the default
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index 9dcbc530c36..6de2e4e40ec 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -598,7 +598,7 @@ verify_loop_closed_ssa (bool verify_ssa_p)
return;
if (verify_ssa_p)
- verify_ssa (false);
+ verify_ssa (false, true);
timevar_push (TV_VERIFY_LOOP_CLOSED);
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 1ea639d9f42..8101ac717fb 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -959,7 +959,7 @@ error:
TODO: verify the variable annotations. */
DEBUG_FUNCTION void
-verify_ssa (bool check_modified_stmt)
+verify_ssa (bool check_modified_stmt, bool check_ssa_operands)
{
size_t i;
basic_block bb;
@@ -1042,7 +1042,7 @@ verify_ssa (bool check_modified_stmt)
goto err;
}
- if (verify_ssa_operands (cfun, stmt))
+ if (check_ssa_operands && verify_ssa_operands (cfun, stmt))
{
print_gimple_stmt (stderr, stmt, 0, TDF_VOPS);
goto err;
diff --git a/gcc/tree-ssa.h b/gcc/tree-ssa.h
index 1b1a9869062..c866206d522 100644
--- a/gcc/tree-ssa.h
+++ b/gcc/tree-ssa.h
@@ -45,7 +45,7 @@ extern void insert_debug_temp_for_var_def (gimple_stmt_iterator *, tree);
extern void insert_debug_temps_for_defs (gimple_stmt_iterator *);
extern void reset_debug_uses (gimple);
extern void release_defs_bitset (bitmap toremove);
-extern void verify_ssa (bool);
+extern void verify_ssa (bool, bool);
extern void init_tree_ssa (struct function *);
extern void delete_tree_ssa (void);
extern bool tree_ssa_useless_type_conversion (tree);