re PR java/14551 (Switch w sign-extended byte and >16 labels causes error in tree.c)
authorAndrew Haley <aph@redhat.com>
Mon, 15 Mar 2004 14:15:09 +0000 (14:15 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Mon, 15 Mar 2004 14:15:09 +0000 (14:15 +0000)
2004-03-12  Andrew Haley  <aph@redhat.com>

        PR java/14551
        * typeck.c (convert): Clear TREE_OVERFLOW after an integer
        conversion.

From-SVN: r79493

gcc/java/ChangeLog
gcc/java/typeck.c

index 8b462313f5939d32c3e8f151dd255162ea1295e2..f080725a1e293be719944e1b16363b043f691af7 100644 (file)
@@ -1,3 +1,9 @@
+2004-03-12  Andrew Haley  <aph@redhat.com>
+
+       PR java/14551
+       * typeck.c (convert): Clear TREE_OVERFLOW after an integer
+       conversion.
+
 2004-02-29  Roger Sayle  <roger@eyesopen.com>
 
        * jcf-parse.c (java_parse_file): Handle the case that input_filename
index 7537c6c4332ed07b2dd229a6607199b4502bc844..d52afd2356288b7c8fef24fbb223c5a441a7e6c0 100644 (file)
@@ -137,7 +137,14 @@ convert (tree type, tree expr)
          && TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT)
        return fold (convert_ieee_real_to_integer (type, expr));
       else
-       return fold (convert_to_integer (type, expr));
+       {
+         /* fold very helpfully sets the overflow status if a type
+            overflows in a narrowing integer conversion, but Java
+            doesn't care.  */
+         tree tmp = fold (convert_to_integer (type, expr));
+         TREE_OVERFLOW (tmp) = 0;
+         return tmp;
+       }
     }    
   if (code == REAL_TYPE)
     return fold (convert_to_real (type, expr));