From 40d822eec2795853b50af39ff2312529337243ed Mon Sep 17 00:00:00 2001 From: tromey Date: Thu, 16 Mar 2006 00:08:12 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112102 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/java/ChangeLog | 5 +++++ gcc/java/jcf-write.c | 28 +++++++++++++++++++--------- libjava/ChangeLog | 5 +++++ libjava/testsuite/libjava.jacks/jacks.xfail | 1 - 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 9e40d60d940..5f840751fb4 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2006-03-15 Tom Tromey + + * jcf-write.c (generate_bytecode_insns): Use qualifying type for + non-static method calls. + 2006-03-15 David Daney * java-tree.h : Moved comment for TYPE_DOT_CLASS adjacent to its diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c index 53433619091..aa4d33b141f 100644 --- a/gcc/java/jcf-write.c +++ b/gcc/java/jcf-write.c @@ -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) { diff --git a/libjava/ChangeLog b/libjava/ChangeLog index cbcb506ba92..f3ff2d68a79 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,10 @@ 2006-03-15 Tom Tromey + * testsuite/libjava.jacks/jacks.xfail: Removed + 13.1-runtime-method-5. + +2006-03-15 Tom Tromey + PR java/26638: * link.cc (get_interfaces): Skip . (append_partial_itable): Likewise. diff --git a/libjava/testsuite/libjava.jacks/jacks.xfail b/libjava/testsuite/libjava.jacks/jacks.xfail index 0ecb62b28b3..081e8ac233a 100644 --- a/libjava/testsuite/libjava.jacks/jacks.xfail +++ b/libjava/testsuite/libjava.jacks/jacks.xfail @@ -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 -- 2.11.4.GIT