aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorAnthony Green <green@redhat.com>2003-06-08 18:10:54 +0000
committerAnthony Green <green@gcc.gnu.org>2003-06-08 18:10:54 +0000
commitf32c53c2153535de4c9016cd174330be4c9a6027 (patch)
tree4a0b49aa184659d74cfe8086a19ee61b887b1d67 /gcc/java
parent10e9fecc62f6c96c41aeff01db61743ce49a2ff9 (diff)
downloadgcc-f32c53c2153535de4c9016cd174330be4c9a6027.zip
gcc-f32c53c2153535de4c9016cd174330be4c9a6027.tar.gz
gcc-f32c53c2153535de4c9016cd174330be4c9a6027.tar.bz2
��> 2003-06-07�� Anthony Green�� <green@redhat.com> ��>...
��> 2003-06-07�� Anthony Green�� <green@redhat.com> ��> ��>������������* parse.y (patch_cast): Fix conversions from floating-point to ��>������������integral types. From-SVN: r67631
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog5
-rw-r--r--gcc/java/parse.y13
2 files changed, 12 insertions, 6 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 7253429..23bc14b 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-08 Anthony Green <green@redhat.com>
+
+ * parse.y (patch_cast): Fix conversions from floating-point to
+ integral types.
+
2003-06-08 Neil Booth <neil@daikokuya.co.uk>
* Make-lang.in: Update.
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 62b796f..88c8c31 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -14224,14 +14224,15 @@ patch_cast (tree node, tree wfl_op)
if (cast_type == op_type)
return node;
- /* float and double type are converted to the original type main
- variant and then to the target type. */
- if (JFLOAT_TYPE_P (op_type) && TREE_CODE (cast_type) == CHAR_TYPE)
- op = convert (integer_type_node, op);
+ /* A narrowing conversion from a floating-point number to an
+ integral type requires special handling (5.1.3). */
+ if (JFLOAT_TYPE_P (op_type) && JINTEGRAL_TYPE_P (cast_type))
+ if (cast_type != long_type_node)
+ op = convert (integer_type_node, op);
- /* Try widening/narowwing convertion. Potentially, things need
+ /* Try widening/narrowing convertion. Potentially, things need
to be worked out in gcc so we implement the extreme cases
- correctly. fold_convert() needs to be fixed. */
+ correctly. fold_convert() needs to be fixed. */
return convert (cast_type, op);
}