bug with overloaded methods in kjc
Patrick Tullmann
kaffe@rufus.w3.org
Tue, 2 May 2000 15:31:00 -0600
There is a bug in KJC's handing of overloaded methods. I believe it
only affects methods whose signatures only contain primitive integer
types. (maybe??)
This is with the KJC included in recent CVS snapshots of Kaffe.
'javac -version' returns:
version number: 1.4D released on 13/02/2000
The attached test case demonstrates that given three methods:
put(byte x);
put(short x);
put(int x);
And three calls:
put((byte)0);
put((short)0);
put((int)0);
KJC incorrectly generates three calls to put(byte). Sun's javac and
IBM's jikes generate the correct calls.
-Pat
----- ----- ---- --- --- -- - - - - -
Pat Tullmann tullmann@cs.utah.edu
"Forty-Two." -- Deep Thought
/**
* Demonstrate method overloading bug in KJC.
*/
public class kjcOverloadBug
{
private int offset;
public static void main(String[] args)
{
kjcOverloadBug o = new kjcOverloadBug();
o.check();
}
public void put(byte x)
{
offset+=1;
}
public void put(short y)
{
offset+=2;
}
public void put(int z)
{
offset+=4;
}
public void checkOffset(int supposedToBe)
{
if (offset != supposedToBe)
{
System.out.println("Offset should be " +supposedToBe+ ", but is " +offset);
System.exit(11);
}
System.out.println("Offset is okay (" +offset+ ").");
}
public void check()
{
offset = 0;
put((byte)0); // offset += 1
put((short)0); // offset += 2
put((int)0); // offset += 4
checkOffset(7);
}
}