This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gcjx] Patch: FYI: handle float->int conversions
- From: Tom Tromey <tromey at redhat dot com>
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Date: 11 Oct 2005 12:02:00 -0600
- Subject: [gcjx] Patch: FYI: handle float->int conversions
- Reply-to: tromey at redhat dot com
I'm checking this in on the gcjx branch.
This fixes a gcjx bug when folding float->int conversions.
When converting to an integer type narrower than 'int', we must first
convert to 'int'.
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* model/primitive.hh (model_int_primitive::convert): Perform
intermediate conversions.
Index: model/primitive.hh
===================================================================
RCS file: /cvs/gcc/gcc/gcjx/model/Attic/primitive.hh,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 primitive.hh
--- model/primitive.hh 9 Oct 2005 20:08:03 -0000 1.1.2.3
+++ model/primitive.hh 11 Oct 2005 18:07:33 -0000
@@ -467,12 +467,25 @@
jvalue convert (const model_type *from_type, const jvalue &from_val)
{
- if (from_type == primitive_float_type)
- return convert_from_float<T, jfloat> (from_val, MIN, MAX);
- else if (from_type == primitive_double_type)
- return convert_from_float<T, jdouble> (from_val, MIN, MAX);
- else
- return model_primitive<T, sig_char>::convert (from_type, from_val);
+ if (from_type == primitive_float_type
+ || from_type == primitive_double_type)
+ {
+ if (this != primitive_int_type && this != primitive_long_type)
+ {
+ // Must use an intermediate cast.
+ model_primitive_base *mpb
+ = assert_cast<model_primitive_base *> (primitive_int_type);
+ jvalue inter = mpb->convert (from_type, from_val);
+ return convert (mpb, inter);
+ }
+
+ if (from_type == primitive_float_type)
+ return convert_from_float<T, jfloat> (from_val, MIN, MAX);
+ else
+ return convert_from_float<T, jdouble> (from_val, MIN, MAX);
+ }
+
+ return model_primitive<T, sig_char>::convert (from_type, from_val);
}
// This is out-of-line so we can specialize for jlong.