OSDN Git Service

Fix another gcc2 merge problem: fix switch statement ISO C conformancs bug
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Nov 1999 01:04:19 +0000 (01:04 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 13 Nov 1999 01:04:19 +0000 (01:04 +0000)
* stmt.c (pushcase, pushcase_range): Partially revert Oct 28 change.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30515 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/stmt.c

index a3e44db..7b10f81 100644 (file)
@@ -1,3 +1,7 @@
+Fri Nov 12 16:26:25 1999  Jim Wilson  <wilson@cygnus.com>
+
+       * stmt.c (pushcase, pushcase_range): Partially revert Oct 28 change.
+
 Fri Nov 12 12:43:49 1999  Richard Henderson  <rth@cygnus.com>
 
        * unroll.c (unroll_loop): Make temp an unsigned HOST_WIDE_INT.
index 17a2402..1f0d291 100644 (file)
@@ -4535,6 +4535,10 @@ pushcase (value, converter, label, duplicate)
   if (index_type == error_mark_node)
     return 0;
 
+  /* Convert VALUE to the type in which the comparisons are nominally done.  */
+  if (value != 0)
+    value = (*converter) (nominal_type, value);
+
   check_seenlabel ();
 
   /* Fail if this value is out of range for the actual type of the index
@@ -4544,10 +4548,6 @@ pushcase (value, converter, label, duplicate)
          || ! int_fits_type_p (value, index_type)))
     return 3;
 
-  /* Convert VALUE to the type in which the comparisons are nominally done.  */
-  if (value != 0)
-    value = (*converter) (nominal_type, value);
-
   /* Fail if this is a duplicate or overlaps another entry.  */
   if (value == 0)
     {
@@ -4619,6 +4619,9 @@ pushcase_range (value1, value2, converter, label, duplicate)
   if (value2 == 0)
     value2 = TYPE_MAX_VALUE (nominal_type);
 
+  value1 = (*converter) (nominal_type, value1);
+  value2 = (*converter) (nominal_type, value2);
+
   /* Fail if these values are out of range.  */
   if (TREE_CONSTANT_OVERFLOW (value1)
       || ! int_fits_type_p (value1, index_type))
@@ -4628,9 +4631,6 @@ pushcase_range (value1, value2, converter, label, duplicate)
       || ! int_fits_type_p (value2, index_type))
     return 3;
 
-  value1 = (*converter) (nominal_type, value1);
-  value2 = (*converter) (nominal_type, value2);
-
   return add_case_node (value1, value2, label, duplicate);
 }