http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48158

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-03-17 
14:10:39 UTC ---
The issue is that in one of the chains passed to
convert_control_dep_chain_into_preds contains just one edge, one where a
GIMPLE_CALL has more than one edge and so we skip it.  This means we end up
with some preds vectors containing no use_pred_info pointers at all (empty,
NULL).
The qsort comparison routine unconditionally looks at the first condition and
so it ICEs.

Following patchlet fixes it, but no idea whether it is the right thing to do,
or whether the problem is elsewhere.

--- gcc/tree-ssa-uninit.c.jj    2011-03-16 18:30:12.000000000 +0100
+++ gcc/tree-ssa-uninit.c    2011-03-17 15:07:04.000000000 +0100
@@ -414,6 +414,9 @@ convert_control_dep_chain_into_preds (VE
           VEC_safe_push (use_pred_info_t, heap, (*preds)[i], one_pred);
         }

+      if (VEC_empty (use_pred_info_t, (*preds)[i]))
+    has_valid_pred = false;
+
       if (!has_valid_pred)
         break;
     }

Reply via email to