2002-03-28 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Mar 2002 16:24:21 +0000 (16:24 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 28 Mar 2002 16:24:21 +0000 (16:24 +0000)
* libjava.lang/Throw_2.java: New.
* libjava.lang/Throw_2.out: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51515 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/testsuite/ChangeLog
libjava/testsuite/libjava.lang/Throw_2.java [new file with mode: 0644]
libjava/testsuite/libjava.lang/Throw_2.out [new file with mode: 0644]

index ed5929b..89823c1 100644 (file)
@@ -1,3 +1,8 @@
+2002-03-28  Andrew Haley  <aph@redhat.com>
+
+       * libjava.lang/Throw_2.java: New.
+       * libjava.lang/Throw_2.out: New.
+
 2002-03-27  Anthony Green  <green@redhat.com>
 
        * libjava.lang/InvokeReturn.java: Modify test for targets
diff --git a/libjava/testsuite/libjava.lang/Throw_2.java b/libjava/testsuite/libjava.lang/Throw_2.java
new file mode 100644 (file)
index 0000000..353ae97
--- /dev/null
@@ -0,0 +1,57 @@
+// Check that NullPointerExceptions thrown from library code are
+// caught.  This detects a number of failures that can be caused by
+// libgcj being built incorrectly.  In particular, we ensure that a
+// SEGV in native (i.e. C++) code in libgcj is handled correctly.
+
+// Regrettably, we cannot guarantee that Double.parseDouble() will
+// always be native code, or that it will never be inlined.  It could
+// be argued that we should add a method to libgcj that will be
+// guaranteed forever to be native, but I'm reluctant to add to the
+// library for the sole purpose of performing this test.
+
+public class Throw_2
+{
+  public static Throwable obj()
+    {
+      return null;
+    }
+
+  public static String str()
+    {
+      return null;
+    }
+
+  static double d;
+
+  public static void main (String[] args)
+    {
+      // This NullPointerException will, at the time of writing, be
+      // thrown from Java code in libgcj.
+      try
+       {
+         java.util.Vector v = new java.util.Vector (null);
+         System.out.println ("fail: no exception thrown");
+       }
+      catch (NullPointerException _)
+       {
+       }
+      catch (Throwable _)
+       {
+         System.out.println ("fail: " + _);
+       }
+      // This one will, at the time of writing, be thrown from C++
+      // code in libgcj.
+      try
+       {
+         d = Double.parseDouble(str());
+         System.out.println ("fail: no exception thrown");
+       }
+      catch (NullPointerException _)
+       {
+       }
+      catch (Throwable _)
+       {
+         System.out.println ("fail: " + _);
+       }
+    }
+}
diff --git a/libjava/testsuite/libjava.lang/Throw_2.out b/libjava/testsuite/libjava.lang/Throw_2.out
new file mode 100644 (file)
index 0000000..e69de29