https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81897

--- Comment #15 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The problem is in the:
@@ -671,11 +669,9 @@
          e = one_cd_chain[j];
          guard_bb = e->src;
          gsi = gsi_last_bb (guard_bb);
-         if (gsi_end_p (gsi))
-           {
-             has_valid_pred = false;
-             break;
-           }
+         /* Ignore empty BBs as they're basically forwarder blocks.  */
+         if (empty_block_p (guard_bb) && single_succ_p (guard_bb))
+           continue;
          cond_stmt = gsi_stmt (gsi);
          if (is_gimple_call (cond_stmt) && EDGE_COUNT (e->src->succs) >= 2)
            /* Ignore EH edge.  Can add assertion on the other edge's flag.  */

hunk.  When guard_bb is a bb that contains one or more PHIs, but no other
statements, then gsi_stmt (gsi) returns NULL and is_gimple_call will ICE on it.
So, something like:
--- gcc/tree-ssa-uninit.c.jj    2018-01-07 20:28:14.894731685 +0100
+++ gcc/tree-ssa-uninit.c       2018-01-08 09:48:11.327325457 +0100
@@ -672,6 +672,11 @@ convert_control_dep_chain_into_preds (ve
          /* Ignore empty BBs as they're basically forwarder blocks.  */
          if (empty_block_p (guard_bb) && single_succ_p (guard_bb))
            continue;
+         if (gsi_end_p (gsi))
+           {
+             has_valid_pred = false;
+             break;
+           }
          cond_stmt = gsi_stmt (gsi);
          if (is_gimple_call (cond_stmt) && EDGE_COUNT (e->src->succs) >= 2)
            /* Ignore EH edge.  Can add assertion on the other edge's flag.  */
ought to fix it.  Also note that for -fcompare-debug, the guard_bb could
contain just one or more PHIs and one or more debug stmts and nothing else, in
that case gsi_last_bb returns an iterator with the debug stmt, so cond_stmt
will be a DEBUG_STMT etc. in current code and will do has_valid_pred = false;
break;
PHIs have non-trivial effect though, so not really sure we can ignore them, but
I could be wrong.  If we ignore them, we'd need to use gsi_last_nondebug_bb
though.

Reply via email to