public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* java/1463: code generation for jvm IRETURN fails on boolean/byte/short methods if INT_TYPE_SIZE < 32
@ 2000-12-20 12:28 Pekka.Nikander
  0 siblings, 0 replies; only message in thread
From: Pekka.Nikander @ 2000-12-20 12:28 UTC (permalink / raw)
  To: java-gnats

>Number:         1463
>Category:       java
>Synopsis:       code generation for jvm IRETURN fails on boolean/byte/short methods if INT_TYPE_SIZE < 32
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    apbianco
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Dec 20 12:20:17 PST 2000
>Closed-Date:    Fri Feb 18 10:19:47 PST 2000
>Last-Modified:  Fri Feb 18 10:20:00 PST 2000
>Originator:     Pekka Nikander
>Release:        gcc-2.95.1
>Organization:
>Environment:
FreeBSD 3.2-STABLE cross compiling for Hitachi/H3 h8300	
>Description:
If the target machine native integer size, 
INT_TYPE_SIZE, is smaller than Java integer size (32 bits),
when compiling class files generated by Sun javac,
code generation fails for methods that return an
boolean, byte or short value (maybe also char?).
The reason for this is that the compiler declares
the return type of the method to be node_integer_type,
which has INT_TYPE_SIZE bits, and the jvm return instruction,
IRETURN, returns an 32 bit integer.  expand_java_return
does not handle this situation.
>How-To-Repeat:
Create a cross compiler for a suitable target (e.g. h8300)
and compile the following source into a class, and then
try to compile from the class file.

class Foo { 
  public boolean equals(Object x) { return x == this; }
}

% javac Foo.java
% gcj Foo.class
>Fix:
Apply the following patch:
$ diff -u gcc*orig/gcc/java/expr.c gcc*1/gcc/java/expr.c
--- gcc-2.95.1.orig/gcc/java/expr.c     Sat Jun  5 11:18:19 1999
+++ gcc-2.95.1/gcc/java/expr.c  Wed Nov  3 12:01:14 1999
@@ -982,6 +982,11 @@
       tree retval = pop_value (type);
       tree res = DECL_RESULT (current_function_decl);
       retval = build (MODIFY_EXPR, TREE_TYPE (res), res, retval);
+#if INT_TYPE_SIZE < 32
+      if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (res)))
+         < GET_MODE_SIZE (TYPE_MODE (type)))
+       retval = build1(NOP_EXPR, TREE_TYPE(res), retval);
+#endif
       TREE_SIDE_EFFECTS (retval) = 1;
       expand_return (retval);
     }
>Release-Note:
I slightly modified your patch, let me know what you think
and I'll check it in.
>Audit-Trail:

Formerly PR gcj/82

State-Changed-From-To: open->feedback
State-Changed-By: apbianco
State-Changed-When: Wed Feb 16 19:35:45 2000
State-Changed-Why:
    Patch reviewed and altered.

From: apbianco@cygnus.com
To: Pekka.Nikander@hut.fi, apbianco@cygnus.com,
  java-gnats@sourceware.cygnus.com
Cc:  
Subject: Re: gcj/82
Date: 17 Feb 2000 03:35:45 -0000

 Synopsis: code generation for jvm IRETURN fails on boolean/byte/short methods if INT_TYPE_SIZE < 32
 
 State-Changed-From-To: open->feedback
 State-Changed-By: apbianco
 State-Changed-When: Wed Feb 16 19:35:45 2000
 State-Changed-Why:
     Patch reviewed and altered.
 
 http://sourceware.cygnus.com/cgi-bin/gnatsweb.pl?cmd=view&pr=82&database=java

From: Pekka Nikander <pekka.nikander@hut.fi>
To: apbianco@cygnus.com
Cc: java-gnats@sourceware.cygnus.com
Subject: Re: gcj/82
Date: Thu, 17 Feb 2000 12:42:43 +0200

 The reviewed patch is OK for me.  I think it is OK to check it in.
 
 --Pekka
State-Changed-From-To: feedback->closed
State-Changed-By: apbianco
State-Changed-When: Fri Feb 18 10:19:47 2000
State-Changed-Why:
    Pekka's patch was checked in:
    
      http://gcc.gnu.org/ml/gcc-patches/2000-02/msg00606.html

From: apbianco@cygnus.com
To: Pekka.Nikander@hut.fi, apbianco@cygnus.com,
  java-gnats@sourceware.cygnus.com
Cc:  
Subject: Re: gcj/82
Date: 18 Feb 2000 18:19:47 -0000

 Synopsis: code generation for jvm IRETURN fails on boolean/byte/short methods if INT_TYPE_SIZE < 32
 
 State-Changed-From-To: feedback->closed
 State-Changed-By: apbianco
 State-Changed-When: Fri Feb 18 10:19:47 2000
 State-Changed-Why:
     Pekka's patch was checked in:
     
       http://gcc.gnu.org/ml/gcc-patches/2000-02/msg00606.html
 
 http://sourceware.cygnus.com/cgi-bin/gnatsweb.pl?cmd=view&pr=82&database=java
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patch"

V2VkIE5vdiAwMyAwMjoxNjowMCBQU1QgMTk5OSAgUGVra2EgTmlrYW5kZXIgIDxwZWtrYS5uaWth
bmRlckBodXQuZmk+CgoJKiBkZWNsLmMgKElOVF9UWVBFX1NJWkUpOiBEZWZpbmUgaWYgbmVjZXNz
YXJ5LgoJKGV4cGFuZF9qYXZhX3JldHVybik6IEhhbmRsZSB0aGUgY2FzZSBvZiBhIG5hdGl2ZSBp
bnRlZ2VyIHNtYWxsZXIKIAl0aGFuIGEgSlZNIGludGVnZXIuCgpJbmRleDogZXhwci5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvZ2NjL2VnY3MvZ2NjL2phdmEvZXhwci5jLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjU4CmRpZmYgLXUgLXAgLXIxLjU4IGV4cHIuYwotLS0gZXhwci5jCTIwMDAv
MDIvMDkgMTQ6MDg6NDQJMS41OAorKysgZXhwci5jCTIwMDAvMDIvMTcgMDM6MzE6NDMKQEAgLTk4
MSw2ICs5ODEsMTAgQEAgZXhwYW5kX2phdmFfcHVzaGMgKGl2YWwsIHR5cGUpCiAgIHB1c2hfdmFs
dWUgKHZhbHVlKTsKIH0KIAorI2lmbmRlZiBJTlRfVFlQRV9TSVpFCisjZGVmaW5lIElOVF9UWVBF
X1NJWkUgQklUU19QRVJfV09SRAorI2VuZGlmCisKIHN0YXRpYyB2b2lkCiBleHBhbmRfamF2YV9y
ZXR1cm4gKHR5cGUpCiAgICAgIHRyZWUgdHlwZTsKQEAgLTk5Miw2ICs5OTYsMTYgQEAgZXhwYW5k
X2phdmFfcmV0dXJuICh0eXBlKQogICAgICAgdHJlZSByZXR2YWwgPSBwb3BfdmFsdWUgKHR5cGUp
OwogICAgICAgdHJlZSByZXMgPSBERUNMX1JFU1VMVCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTsK
ICAgICAgIHJldHZhbCA9IGJ1aWxkIChNT0RJRllfRVhQUiwgVFJFRV9UWVBFIChyZXMpLCByZXMs
IHJldHZhbCk7CisKKyAgICAgIC8qIEhhbmRsZSB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBuYXRp
dmUgaW50ZWdlciB0eXBlIGlzIHNtYWxsZXIKKwkgdGhhbiB0aGUgSlZNIGludGVnZXIuIEl0IGNh
biBoYXBwZW4gZm9yIG1hbnkgY3Jvc3MgY29tcGlsZXJzLgorCSBUaGUgd2hvbGUgaWYgZXhwcmVz
c2lvbiBqdXN0IGdvZXMgYXdheSBpZiBJTlRfVFlQRV9TSVpFIDwgMzIKKwkgaXMgZmFsc2UuICov
CisgICAgICBpZiAoSU5UX1RZUEVfU0laRSA8IDMyCisJICAmJiAoR0VUX01PREVfU0laRSAoVFlQ
RV9NT0RFIChUUkVFX1RZUEUgKHJlcykpKQorCSAgICAgIDwgR0VUX01PREVfU0laRSAoVFlQRV9N
T0RFICh0eXBlKSkpKQorCXJldHZhbCA9IGJ1aWxkMShOT1BfRVhQUiwgVFJFRV9UWVBFKHJlcyks
IHJldHZhbCk7CisgICAgICAKICAgICAgIFRSRUVfU0lERV9FRkZFQ1RTIChyZXR2YWwpID0gMTsK
ICAgICAgIGV4cGFuZF9yZXR1cm4gKHJldHZhbCk7CiAgICAgfQo=



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2000-12-20 12:28 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-12-20 12:28 java/1463: code generation for jvm IRETURN fails on boolean/byte/short methods if INT_TYPE_SIZE < 32 Pekka.Nikander

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).