This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

java/6820: miscompilation of (a,++a) as arguments to final method



>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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]