From 5be1632b7deef653e188e11a930c938c7d3ce6e6 Mon Sep 17 00:00:00 2001
From: Steven Bosscher <steven@gcc.gnu.org>
Date: Mon, 7 May 2012 14:40:33 +0000
Subject: [PATCH] re PR middle-end/53245 (ice in expand_case)

	PR middle-end/53245
	* gimplify.c (preprocess_case_label_vec_for_gimple): If low or high
	is folded to a type boundary value, verify that the resulting case
	label is still a care range.

From-SVN: r187248
---
 gcc/ChangeLog  | 7 +++++++
 gcc/gimplify.c | 4 ++++
 2 files changed, 11 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 133719b3387b..33aae8a11d85 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2012-05-07  Steven Bosscher  <steven@gcc.gnu.org>
+
+	PR middle-end/53245
+	* gimplify.c (preprocess_case_label_vec_for_gimple): If low or high
+	is folded to a type boundary value, verify that the resulting case
+	label is still a care range.
+
 2012-05-07  Uros Bizjak  <ubizjak@gmail.com>
 
 	* config/i386/i386.md (ctz<mode>2): Emit rep;bsf
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index d7cbc2489a1b..74d789502031 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1658,6 +1658,10 @@ preprocess_case_label_vec_for_gimple (VEC(tree,heap) *labels,
 		      && tree_int_cst_compare (high, max_value) > 0)
 		    high = max_value;
 		  high = fold_convert (index_type, high);
+
+		  /* We may have folded a case range to a one-value case.  */
+		  if (tree_int_cst_equal (low, high))
+		    high = NULL_TREE;
 		}
 	    }
 
-- 
GitLab