From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7506 invoked by alias); 13 Jan 2009 19:22:50 -0000 Received: (qmail 6859 invoked by alias); 13 Jan 2009 19:22:31 -0000 Date: Tue, 13 Jan 2009 19:22:00 -0000 Message-ID: <20090113192231.6858.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug java/38827] gcj emitting incorrect code In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "pinskia at gmail dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2009-01/txt/msg01381.txt.bz2 ------- 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" 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 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 :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 (Bug_Class arg1) > [Signature((TE;)V)]']: > VERIFIED_REJECTED > Constraint violated in method 'public void (Bug_Class arg1) > [Signature((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