From a0f4cca64282e20ad9736528dc5d1b20ce4536e0 Mon Sep 17 00:00:00 2001 From: Pekka Nikander Date: Fri, 18 Feb 2000 20:17:37 +0200 Subject: [PATCH] re GNATS gcj/82 (code generation for jvm IRETURN fails on boolean/byte/short methods if INT_TYPE_SIZE < 32) Wed Nov 03 02:16:00 PST 1999 Pekka Nikander * decl.c (INT_TYPE_SIZE): Define if necessary. (expand_java_return): Handle the case of a native integer smaller than a JVM integer. (Fix to the Java PR #82: http://sourceware.cygnus.com/ml/java-prs/1999-q4/msg00078.html) From-SVN: r32051 --- gcc/java/ChangeLog | 6 ++++++ gcc/java/expr.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 73f2054968b..e3b19927758 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,9 @@ +Wed Nov 03 02:16:00 PST 1999 Pekka Nikander + + * decl.c (INT_TYPE_SIZE): Define if necessary. + (expand_java_return): Handle the case of a native integer smaller + than a JVM integer. + 2000-02-18 Martin von Loewis * gjavah.c (help): Use GCCBUGURL. diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 3c1c0ffbd3d..f25b1940a91 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -981,6 +981,10 @@ expand_java_pushc (ival, type) push_value (value); } +#ifndef INT_TYPE_SIZE +#define INT_TYPE_SIZE BITS_PER_WORD +#endif + static void expand_java_return (type) tree type; @@ -992,6 +996,16 @@ expand_java_return (type) tree retval = pop_value (type); tree res = DECL_RESULT (current_function_decl); retval = build (MODIFY_EXPR, TREE_TYPE (res), res, retval); + + /* Handle the situation where the native integer type is smaller + than the JVM integer. It can happen for many cross compilers. + The whole if expression just goes away if INT_TYPE_SIZE < 32 + is false. */ + if (INT_TYPE_SIZE < 32 + && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (res))) + < GET_MODE_SIZE (TYPE_MODE (type)))) + retval = build1(NOP_EXPR, TREE_TYPE(res), retval); + TREE_SIDE_EFFECTS (retval) = 1; expand_return (retval); } -- 2.30.2