This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug java/38827] New: gcj emitting incorrect code
- From: "tschwinge at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 13 Jan 2009 16:03:40 -0000
- Subject: [Bug java/38827] New: gcj emitting incorrect code
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
I originally found this problem when trying to compile a Java package written
by the Universität Stuttgart's institute IKR. I was using Debian's gcj
package, version 4.3.2-2, but can likewise reproduce this using SVN trunk, as
well as Debian's 4.2.4-4 package.
I completely reduced the test case to the following:
public class Bug_Class
{
}
public interface Bug_Interface
{
}
public class Bug
{
public <X extends Bug_Class & Bug_Interface> Bug(X x)
{
set(x);
}
public void set(Bug_Interface x)
{
}
}
Directly compiling this will fail as follows:
$ ~/GCC/trunk.build.64.install/bin/gcj -c Bug.java
Bug.java: In class 'Bug':
Bug.java: In constructor '(Bug_Class)':
In file included from <built-in>:3:
Bug.java:3: error: verification failed at PC=9: incompatible type on stack
gcj is able to emit a class file, but that one is considered non-verifying by
the BCEL verifier:
[...]
Pass 3b, method number 0 ['public void <init>(Bug_Class arg1)
[Signature(<E:LBug_Class;:LBug_Interface;>(TE;)V)]']:
VERIFIED_REJECTED
Constraint violated in method 'public void <init>(Bug_Class arg1)
[Signature(<E:LBug_Class;:LBug_Interface;>(TE;)V)]':
Instruction INVOKEVIRTUAL constraint violated: Expecting a 'Bug_Interface'
but found a 'Bug_Class' on the stack (which is not assignment compatible).
InstructionHandle: 6: invokevirtual[182](3) 13
[...]
What Sun's javac does differently (as per class-file disassembly inspection) is
emitting a checkcast against class Bug_Interface before calling invokevirtual.
--
Summary: gcj emitting incorrect code
Product: gcc
Version: 4.3.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: java
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tschwinge at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38827