gcj producing bad code
Nic Ferrier
nferrier@tapsellferrier.co.uk
Sat Apr 6 15:47:00 GMT 2002
Eric Blake <ebb9@email.byu.edu> writes:
> Nic Ferrier wrote:
> >
> > GCJ is not compiling method calls quite right... it seems that all
> > super invocations are done through invokespecial. invokespecial
> > cannot be used when the target needs to be called through virtual
> > dispatch however.
>> I'm not quite sure you said that right. Any call to super.method() is
> required to compile to invokespecial (unless method is static, in which
> case invokestatic is appropriate). By the way, in the case of
> EnclosingClass.super.method(), it may require the assistance of an
> accessor method to use invokespecial while still obeying access rules.
> Consider this example, from the point of view of class C:
The case I'm referring to is a metjod invocation on a property of the
super class, thus:
class A
X x;
public X getX() { return x; }
class B extends A
public Y getY() { return super.getX().getY(); }
The method B::getY() must compile to call getY() through a virtual
dispatch even though X is in super.
That's how Sun's compiler compiples such code anyway.
Nic
More information about the Java
mailing list