This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
java/6820: miscompilation of (a,++a) as arguments to final method
- From: Oskar Liljeblad <oskar at osk dot mine dot nu>
- To: gcc-gnats at gcc dot gnu dot org
- Date: 26 May 2002 17:07:46 -0000
- Subject: java/6820: miscompilation of (a,++a) as arguments to final method
- Reply-to: Oskar Liljeblad <oskar at osk dot mine dot nu>
>Number: 6820
>Category: java
>Synopsis: miscompilation of (a,++a) as arguments to final method
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun May 26 10:16:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Oskar Liljeblad <oskar@osk.mine.nu>
>Release: 3.1
>Organization:
>Environment:
Linux/x86
>Description:
(Let's hope this is not a dupe...)
See the code below. With Demo compiled with gcj from source to x86 machine code, the output is "a=11 b=11". The output is correctly "a=10 b=11" when:
* compiling and running with Sun JDK 1.4 javac.
* compiling from source to .class and interpreting
with gij.
* compiling from source to .class, and .class to
machine code with gcj.
Note that this bug only happens when calling methods that are final (or in final classes).
Oskar Liljeblad (oskar@osk.mine.nu)
>How-To-Repeat:
class Demo {
public static void main(String[] args) {
Dummy d = new Dummy();
int a = 10;
d.m(a,++a);
}
}
final class Dummy {
public void m(int a, int b) {
System.out.println("a="+a+" b="+b);
}
}
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: