summaryrefslogtreecommitdiff
path: root/libjava/jni.cc
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2002-11-06 14:14:51 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2002-11-06 14:14:51 +0000
commit99382f70675095d5eb97e47f8012b18e0a0cbc45 (patch)
tree5e40553d62987d7a26ae4504332fd68a3ebc8043 /libjava/jni.cc
parent97881bddd86a5b7f75c4b90fe5568d52f8a28595 (diff)
downloadgcc-99382f70675095d5eb97e47f8012b18e0a0cbc45.tar.gz
* jni.cc (array_from_valist): Assume that jlong won't be
promoted. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58859 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/jni.cc')
-rw-r--r--libjava/jni.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/libjava/jni.cc b/libjava/jni.cc
index 2985d47930d..9865ce42a46 100644
--- a/libjava/jni.cc
+++ b/libjava/jni.cc
@@ -693,7 +693,13 @@ array_from_valist (jvalue *values, JArray<jclass> *arg_types, va_list vargs)
{
// Here we assume that sizeof(int) >= sizeof(jint), because we
// use `int' when decoding the varargs. Likewise for
- // long/jlong, float, and double.
+ // float, and double. Also we assume that sizeof(jlong) >=
+ // sizeof(int), i.e. that jlong values are not further
+ // promoted.
+ JvAssert (sizeof (int) >= sizeof (jint));
+ JvAssert (sizeof (jlong) >= sizeof (int));
+ JvAssert (sizeof (double) >= sizeof (jfloat));
+ JvAssert (sizeof (double) >= sizeof (jdouble));
if (arg_elts[i] == JvPrimClass (byte))
values[i].b = (jbyte) va_arg (vargs, int);
else if (arg_elts[i] == JvPrimClass (short))
@@ -701,7 +707,7 @@ array_from_valist (jvalue *values, JArray<jclass> *arg_types, va_list vargs)
else if (arg_elts[i] == JvPrimClass (int))
values[i].i = (jint) va_arg (vargs, int);
else if (arg_elts[i] == JvPrimClass (long))
- values[i].j = (jlong) va_arg (vargs, long);
+ values[i].j = (jlong) va_arg (vargs, jlong);
else if (arg_elts[i] == JvPrimClass (float))
values[i].f = (jfloat) va_arg (vargs, double);
else if (arg_elts[i] == JvPrimClass (double))