expr.c (expand_expr_real_1, [...]): Don't check against bounds if bounds aren't constant.
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Mon, 5 Jul 2004 15:09:06 +0000 (15:09 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 5 Jul 2004 15:09:06 +0000 (11:09 -0400)
* expr.c (expand_expr_real_1, case SWITCH_EXPR): Don't check against
bounds if bounds aren't constant.

From-SVN: r84117

gcc/ChangeLog
gcc/expr.c

index a0023646c05aee6a696b95d3c0360faa0eb17b7d..a8e9522dbf814f9895bc3d9e350c4fd36e5bc313 100644 (file)
@@ -5,6 +5,9 @@
 
 2004-07-05  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * expr.c (expand_expr_real_1, case SWITCH_EXPR): Don't check against
+       bounds if bounds aren't constant.
+
        * tree-cfg.c (verify_expr): Use CHECK_OP in binary case.
 
        * function.c, langhooks-def.h, langhooks.h: Move max_size hook
index b44309ded60acb267f6d0b6fdb2216be3571ef41..efca348f547dcfe7f644d8e8d31b6ab9d0924552 100644 (file)
@@ -9221,8 +9221,9 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
              if (case_low && case_high)
                {
                  /* Case label is less than minimum for type.  */
-                 if ((tree_int_cst_compare (case_low, min_value) < 0)
-                     && (tree_int_cst_compare (case_high, min_value) < 0))
+                 if (TREE_CODE (min_value) == INTEGER_CST
+                     && tree_int_cst_compare (case_low, min_value) < 0
+                     && tree_int_cst_compare (case_high, min_value) < 0)
                    {
                      warning ("case label value %d is less than minimum value for type",
                               TREE_INT_CST (case_low));
@@ -9230,8 +9231,9 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
                    }
                  
                  /* Case value is greater than maximum for type.  */
-                 if ((tree_int_cst_compare (case_low, max_value) > 0)
-                     && (tree_int_cst_compare (case_high, max_value) > 0))
+                 if (TREE_CODE (max_value) == INTEGER_CST
+                     && tree_int_cst_compare (case_low, max_value) > 0
+                     && tree_int_cst_compare (case_high, max_value) > 0)
                    {
                      warning ("case label value %d exceeds maximum value for type",
                               TREE_INT_CST (case_high));
@@ -9239,8 +9241,9 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
                    }
                  
                  /* Saturate lower case label value to minimum.  */
-                 if ((tree_int_cst_compare (case_high, min_value) >= 0)
-                     && (tree_int_cst_compare (case_low, min_value) < 0))
+                 if (TREE_CODE (min_value) == INTEGER_CST
+                     && tree_int_cst_compare (case_high, min_value) >= 0
+                     && tree_int_cst_compare (case_low, min_value) < 0)
                    {
                      warning ("lower value %d in case label range less than minimum value for type",
                               TREE_INT_CST (case_low));
@@ -9248,8 +9251,9 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
                    }
                  
                  /* Saturate upper case label value to maximum.  */
-                 if ((tree_int_cst_compare (case_low, max_value) <= 0)
-                     && (tree_int_cst_compare (case_high, max_value) > 0))
+                 if (TREE_CODE (max_value) == INTEGER_CST
+                     && tree_int_cst_compare (case_low, max_value) <= 0
+                     && tree_int_cst_compare (case_high, max_value) > 0)
                    {
                      warning ("upper value %d in case label range exceeds maximum value for type",
                               TREE_INT_CST (case_high));