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; }