jcf-write.c (generate_bytecode_insns): Use qualifying type for non-static method calls.

gcc/java
	* jcf-write.c (generate_bytecode_insns): Use qualifying type for
	non-static method calls.
libjava
	* testsuite/libjava.jacks/jacks.xfail: Removed
	13.1-runtime-method-5.

From-SVN: r112102
This commit is contained in:
Tom Tromey 2006-03-16 00:08:12 +00:00 committed by Tom Tromey
parent 34a9f549fd
commit b32d6f93f8
4 changed files with 29 additions and 10 deletions

View file

@ -1,3 +1,8 @@
2006-03-15 Tom Tromey <tromey@redhat.com>
* jcf-write.c (generate_bytecode_insns): Use qualifying type for
non-static method calls.
2006-03-15 David Daney <ddaney@avtrex.com>
* java-tree.h : Moved comment for TYPE_DOT_CLASS adjacent to its

View file

@ -1,5 +1,5 @@
/* Write out a Java(TM) class file.
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of GCC.
@ -2610,26 +2610,36 @@ generate_bytecode_insns (tree exp, int target, struct jcf_partial *state)
tree context = DECL_CONTEXT (f);
int index, interface = 0;
RESERVE (5);
/* If the method is not static, use the qualifying type.
However, don't use the qualifying type if the method
was declared in Object. */
if (! METHOD_STATIC (f)
&& ! DECL_CONSTRUCTOR_P (f)
&& ! METHOD_PRIVATE (f)
&& DECL_CONTEXT (f) != object_type_node)
{
tree arg1 = TREE_VALUE (TREE_OPERAND (exp, 1));
context = TREE_TYPE (TREE_TYPE (arg1));
}
if (METHOD_STATIC (f))
OP1 (OPCODE_invokestatic);
else if (DECL_CONSTRUCTOR_P (f) || CALL_USING_SUPER (exp)
|| METHOD_PRIVATE (f))
|| METHOD_PRIVATE (f))
OP1 (OPCODE_invokespecial);
else
{
if (CLASS_INTERFACE (TYPE_NAME (context)))
{
tree arg1 = TREE_VALUE (TREE_OPERAND (exp, 1));
context = TREE_TYPE (TREE_TYPE (arg1));
if (CLASS_INTERFACE (TYPE_NAME (context)))
interface = 1;
}
interface = 1;
if (interface)
OP1 (OPCODE_invokeinterface);
else
OP1 (OPCODE_invokevirtual);
}
index = find_methodref_with_class_index (&state->cpool, f, context);
index = find_methodref_with_class_index (&state->cpool, f,
context);
OP2 (index);
if (interface)
{

View file

@ -1,3 +1,8 @@
2006-03-15 Tom Tromey <tromey@redhat.com>
* testsuite/libjava.jacks/jacks.xfail: Removed
13.1-runtime-method-5.
2006-03-15 Tom Tromey <tromey@redhat.com>
PR java/26638:

View file

@ -5,7 +5,6 @@
13.1-runtime-constant-1
13.1-runtime-constant-3
13.1-runtime-field-1
13.1-runtime-method-5
13.1-runtime-method-6
13.4.8-constant-runtime-1
13.4.8-constant-runtime-2