------- Comment #38 from rguenth at gcc dot gnu dot org 2010-07-08 11:45 -------
Index: gcc/tree-vrp.c =================================================================== --- gcc/tree-vrp.c (revision 161949) +++ gcc/tree-vrp.c (working copy) @@ -4534,12 +4538,11 @@ compare_case_labels (const void *p1, con { const_tree const case1 = *(const_tree const*)p1; const_tree const case2 = *(const_tree const*)p2; - unsigned int uid1 = DECL_UID (CASE_LABEL (case1)); - unsigned int uid2 = DECL_UID (CASE_LABEL (case2)); + unsigned int uid1 = LABEL_DECL_UID (CASE_LABEL (case1)); + unsigned int uid2 = LABEL_DECL_UID (CASE_LABEL (case2)); - if (uid1 < uid2) - return -1; - else if (uid1 == uid2) + if (uid1 == uid2 + || uid1 == -1u || uid2 == -1u) { /* Make sure the default label is first in a group. */ if (!CASE_LOW (case1)) @@ -4549,8 +4552,7 @@ compare_case_labels (const void *p1, con else return tree_int_cst_compare (CASE_LOW (case1), CASE_LOW (case2)); } - else - return 1; + return uid1 < uid2 ? -1 : 1; } fixes the testcase. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44832