aboutsummaryrefslogtreecommitdiff
path: root/libjava/testsuite
diff options
context:
space:
mode:
authorMatthew Fortune <matthew.fortune@imgtec.com>2016-07-13 21:34:52 +0000
committerMatthew Fortune <mpf@gcc.gnu.org>2016-07-13 21:34:52 +0000
commit0d355cf973a80a3d15132ceabd55f6510f729d88 (patch)
tree11cf9820abde4b603bbec44402852023a55e10fd /libjava/testsuite
parent845a4b727a88af8f4008e24e1a02ce49607bd91a (diff)
downloadgcc-0d355cf973a80a3d15132ceabd55f6510f729d88.zip
gcc-0d355cf973a80a3d15132ceabd55f6510f729d88.tar.gz
gcc-0d355cf973a80a3d15132ceabd55f6510f729d88.tar.bz2
Fix return type handling for Proxy classes
libjava/ * java/lang/reflect/natVMProxy.cc (unbox): Use ffi_arg for integer return types smaller than a word. * testsuite/libjava.jar/ReturnInvocationHandler.java: New file. * testsuite/libjava.jar/ReturnProxyTest.jar: Likewise. * testsuite/libjava.jar/ReturnProxyTest.java: Likewise. * testsuite/libjava.jar/ReturnProxyTest.out: Likewise. * testsuite/libjava.jar/ReturnProxyTest.xfail: Likewise. * testsuite/libjava.jar/ReturnTypes.java: Likewise. * testsuite/libjava.jar/ReturnTypesImpl.java: Likewise. From-SVN: r238312
Diffstat (limited to 'libjava/testsuite')
-rw-r--r--libjava/testsuite/libjava.jar/ReturnInvocationHandler.java24
-rw-r--r--libjava/testsuite/libjava.jar/ReturnProxyTest.jarbin0 -> 2671 bytes
-rw-r--r--libjava/testsuite/libjava.jar/ReturnProxyTest.java27
-rw-r--r--libjava/testsuite/libjava.jar/ReturnProxyTest.out12
-rw-r--r--libjava/testsuite/libjava.jar/ReturnProxyTest.xfail1
-rw-r--r--libjava/testsuite/libjava.jar/ReturnTypes.java9
-rw-r--r--libjava/testsuite/libjava.jar/ReturnTypesImpl.java27
7 files changed, 100 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.jar/ReturnInvocationHandler.java b/libjava/testsuite/libjava.jar/ReturnInvocationHandler.java
new file mode 100644
index 0000000..18b52b73a
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/ReturnInvocationHandler.java
@@ -0,0 +1,24 @@
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+public class ReturnInvocationHandler implements InvocationHandler
+{
+ private Object obj;
+ public ReturnInvocationHandler(Object obj)
+ {
+ this.obj = obj;
+ }
+ public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
+ {
+ Object result;
+ try
+ {
+ result = m.invoke(obj, args);
+ }
+ catch (Exception e)
+ {
+ throw e;
+ }
+ return result;
+ }
+}
diff --git a/libjava/testsuite/libjava.jar/ReturnProxyTest.jar b/libjava/testsuite/libjava.jar/ReturnProxyTest.jar
new file mode 100644
index 0000000..00daabe
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/ReturnProxyTest.jar
Binary files differ
diff --git a/libjava/testsuite/libjava.jar/ReturnProxyTest.java b/libjava/testsuite/libjava.jar/ReturnProxyTest.java
new file mode 100644
index 0000000..bdd0ba9
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/ReturnProxyTest.java
@@ -0,0 +1,27 @@
+import java.lang.reflect.Proxy;
+
+public class ReturnProxyTest
+{
+ public static void main(String[] args)
+ {
+ ReturnTypes orig = new ReturnTypesImpl();
+ Object o = Proxy.newProxyInstance(orig.getClass().getClassLoader(),
+ new Class<?>[] { ReturnTypes.class },
+ new ReturnInvocationHandler(orig));
+ ReturnTypes rt = (ReturnTypes)o;
+
+ System.out.println(orig.getBoolean());
+ System.out.println(orig.getChar());
+ System.out.println(orig.getByte());
+ System.out.println(orig.getShort());
+ System.out.println(orig.getInt());
+ System.out.println(orig.getLong());
+
+ System.out.println(rt.getBoolean());
+ System.out.println(rt.getChar());
+ System.out.println(rt.getByte());
+ System.out.println(rt.getShort());
+ System.out.println(rt.getInt());
+ System.out.println(rt.getLong());
+ }
+}
diff --git a/libjava/testsuite/libjava.jar/ReturnProxyTest.out b/libjava/testsuite/libjava.jar/ReturnProxyTest.out
new file mode 100644
index 0000000..b141f06
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/ReturnProxyTest.out
@@ -0,0 +1,12 @@
+false
+a
+-1
+-1
+-1
+-1
+false
+a
+-1
+-1
+-1
+-1
diff --git a/libjava/testsuite/libjava.jar/ReturnProxyTest.xfail b/libjava/testsuite/libjava.jar/ReturnProxyTest.xfail
new file mode 100644
index 0000000..73ffe1d
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/ReturnProxyTest.xfail
@@ -0,0 +1 @@
+main=ReturnProxyTest
diff --git a/libjava/testsuite/libjava.jar/ReturnTypes.java b/libjava/testsuite/libjava.jar/ReturnTypes.java
new file mode 100644
index 0000000..9fbd6bd
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/ReturnTypes.java
@@ -0,0 +1,9 @@
+public interface ReturnTypes
+{
+ public short getShort();
+ public char getChar();
+ public byte getByte();
+ public int getInt();
+ public long getLong();
+ public boolean getBoolean();
+}
diff --git a/libjava/testsuite/libjava.jar/ReturnTypesImpl.java b/libjava/testsuite/libjava.jar/ReturnTypesImpl.java
new file mode 100644
index 0000000..33fab1b
--- /dev/null
+++ b/libjava/testsuite/libjava.jar/ReturnTypesImpl.java
@@ -0,0 +1,27 @@
+public class ReturnTypesImpl implements ReturnTypes
+{
+ public short getShort()
+ {
+ return -1;
+ }
+ public char getChar()
+ {
+ return 'a';
+ }
+ public byte getByte()
+ {
+ return -1;
+ }
+ public int getInt()
+ {
+ return -1;
+ }
+ public long getLong()
+ {
+ return -1;
+ }
+ public boolean getBoolean()
+ {
+ return false;
+ }
+}