summaryrefslogtreecommitdiff
path: root/libjava/testsuite
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2004-04-14 17:45:20 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>2004-04-14 17:45:20 +0000
commit5afb5bfcd0d68cbfdc9a07d65c424fc208ff316d (patch)
treeb9dbd14f53ce12873b97ef6caeb33b3335f0e3c5 /libjava/testsuite
parentd746b29ba0a20e2debada1b48a14e7c19fb7377c (diff)
downloadgcc-5afb5bfcd0d68cbfdc9a07d65c424fc208ff316d.tar.gz
2004-04-14 Andrew Haley <aph@redhat.com>
Bryce McKinlay <mckinlay@redhat.com> * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Use _Jv_LookupInterfaceMethodIdx for calls to interfaces. * include/jvm.h (_Jv_CallAnyMethodA): Add new face' arg. * testsuite/libjava.lang/InvokeInterface.java: New file. * testsuite/libjava.lang/InvokeInterface.out: New file. 2004-04-14 Bryce McKinlay <mckinlay@redhat.com> * class.c (get_interface_method_index): New function. Return dispatch index for interface method. (make_method_value): For interface methods, set index field to iface dispatch index, not DECL_VINDEX. * expr.c (build_invokeinterface): Use get_interface_method_index. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@80684 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/testsuite')
-rw-r--r--libjava/testsuite/Makefile.in4
-rw-r--r--libjava/testsuite/libjava.lang/InvokeInterface.java55
-rw-r--r--libjava/testsuite/libjava.lang/InvokeInterface.out6
3 files changed, 63 insertions, 2 deletions
diff --git a/libjava/testsuite/Makefile.in b/libjava/testsuite/Makefile.in
index 129d25c6471..21c86dd9d01 100644
--- a/libjava/testsuite/Makefile.in
+++ b/libjava/testsuite/Makefile.in
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
diff --git a/libjava/testsuite/libjava.lang/InvokeInterface.java b/libjava/testsuite/libjava.lang/InvokeInterface.java
new file mode 100644
index 00000000000..6f4dc617d39
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/InvokeInterface.java
@@ -0,0 +1,55 @@
+import java.lang.reflect.*;
+
+interface one
+{
+ int n(int N);
+}
+
+interface two
+{
+ int nn(int N);
+}
+
+interface three
+{
+ int nnn(int N);
+}
+
+class arse implements one, two
+{
+ public int n(int N) { return N; }
+ public int nn(int N) { return N*2; }
+}
+
+class arsey implements two, one, three
+{
+ public int n(int N) { return N*4; }
+ public int nn(int N) { return N*8; }
+ public int nnn(int N) { return N*16; }
+}
+
+public class InvokeInterface extends arse
+{
+ int f ()
+ {
+ return flunk.nn(1);
+ }
+ static two flunk = new arse();
+ static three flunkey = new arsey();
+ public static void main(String[] s) throws Throwable
+ {
+ Class[] argtypes = {Integer.TYPE};
+ Method m = two.class.getMethod("nn", argtypes);
+ Object[] args = {new Integer(1)};
+ System.out.println(flunk.nn(1));
+ System.out.println(m.invoke(new arse(), args));
+ m = arse.class.getMethod("nn", argtypes);
+ System.out.println(m.invoke(new arse(), args));
+ m = two.class.getMethod("nn", argtypes);
+ System.out.println(m.invoke(new arsey(), args));
+ m = three.class.getMethod("nnn", argtypes);
+ System.out.println(m.invoke(new arsey(), args));
+ m = arsey.class.getMethod("nnn", argtypes);
+ System.out.println(m.invoke(new arsey(), args));
+ }
+}
diff --git a/libjava/testsuite/libjava.lang/InvokeInterface.out b/libjava/testsuite/libjava.lang/InvokeInterface.out
new file mode 100644
index 00000000000..803d02666a2
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/InvokeInterface.out
@@ -0,0 +1,6 @@
+2
+2
+2
+8
+16
+16