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

Reply via email to