diff options
author | Matthew Fortune <matthew.fortune@imgtec.com> | 2016-07-13 21:34:52 +0000 |
---|---|---|
committer | Matthew Fortune <mpf@gcc.gnu.org> | 2016-07-13 21:34:52 +0000 |
commit | 0d355cf973a80a3d15132ceabd55f6510f729d88 (patch) | |
tree | 11cf9820abde4b603bbec44402852023a55e10fd /libjava/testsuite | |
parent | 845a4b727a88af8f4008e24e1a02ce49607bd91a (diff) | |
download | gcc-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.java | 24 | ||||
-rw-r--r-- | libjava/testsuite/libjava.jar/ReturnProxyTest.jar | bin | 0 -> 2671 bytes | |||
-rw-r--r-- | libjava/testsuite/libjava.jar/ReturnProxyTest.java | 27 | ||||
-rw-r--r-- | libjava/testsuite/libjava.jar/ReturnProxyTest.out | 12 | ||||
-rw-r--r-- | libjava/testsuite/libjava.jar/ReturnProxyTest.xfail | 1 | ||||
-rw-r--r-- | libjava/testsuite/libjava.jar/ReturnTypes.java | 9 | ||||
-rw-r--r-- | libjava/testsuite/libjava.jar/ReturnTypesImpl.java | 27 |
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 Binary files differnew file mode 100644 index 0000000..00daabe --- /dev/null +++ b/libjava/testsuite/libjava.jar/ReturnProxyTest.jar 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; + } +} |