------- Comment #1 from pinskia at gmail dot com 2009-01-13 19:22 ------- Subject: Re: New: gcj emitting incorrect code
On Jan 13, 2009, at 8:03 AM, "tschwinge at gcc dot gnu dot org" <gcc-bugzi...@gcc.gnu.org > wrote: > 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: This sounds like a bug in the eclispe source to bytecode compiler which gcj uses now. > > > [...] > 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 > -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38827