]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
passes.c (execute_function_todo): Move TODO_verify_stmts and TODO_verify_ssa under...
authorRichard Biener <rguenther@suse.de>
Wed, 30 Apr 2014 08:06:49 +0000 (08:06 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 30 Apr 2014 08:06:49 +0000 (08:06 +0000)
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.

From-SVN: r209928

gcc/ChangeLog
gcc/graphite-scop-detection.c
gcc/passes.c
gcc/tree-cfg.c
gcc/tree-cfg.h
gcc/tree-eh.c
gcc/tree-ssa-loop-manip.c
gcc/tree-ssa.c
gcc/tree-ssa.h

index 1bec6e12fa8722ae203e9d4b314e45488508e982..5b771ea4fc8c0ad96fa81d7cb12f398dc7082795 100644 (file)
@@ -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.
index 635e21a8519b53464edd8298fdda0d9d6f09c61c..5d1c96e353da6a433b9a936b006a090eaee5456f 100644 (file)
@@ -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
 }
 
index 7559a3ba3a157cded1d1db1531c809fc91026e21..dbff5875a5d90070dc6ddb253b997d47292091bc 100644 (file)
@@ -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);
index a5f09ea9d9e5f428ef6d8cf03d5aedea5b3f292b..1918679f1bf2c91d26bf0691913cd44f8822a601 100644 (file)
@@ -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;
index a115df58b9d5c77f023465c8465080fe2bde8216..751d0a29e5a53211268a16ffd1822d1f162a2d38 100644 (file)
@@ -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);
index 960c04a14d0fa930eb2cf118fc8c540178fa8516..7b65319f85715e4e6f916ca174a8b01e91abc642 100644 (file)
@@ -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
index 9dcbc530c3672984e13e6ca95c8baed999aa4996..6de2e4e40ecb3f73fc9a51f5506eca5751b1821a 100644 (file)
@@ -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);
 
index 1ea639d9f42b3e4c4116cab12e6a142e2d99cab3..8101ac717fb1fdfbfe1f66af26e37a80575d4d05 100644 (file)
@@ -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;
index 1b1a98690623ce873dfb39cd332c2e265dc8ac8c..c866206d522ef0df79cbe9badca799d5b9e8640b 100644 (file)
@@ -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);