// 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: " + _);
	}
    }
}
