Hi Tom, RTEMS does not have virtual memory management, so there is no error when access the 0 address on rtems. So 'str->length()' donot throw NPE and just return an meaningless value.
Ps: There is a test: http://code.google.com/p/rtemsgcj/source/browse/trunk/algorithm/20110810NPE/?r=127, npe.c is the main file and *.scn is the output. Thanks, Jie 2011/8/8 Tom Tromey <tro...@redhat.com>: >>>>>> "Jie" == Jie Liu <lj8...@gmail.com> writes: > > Jie> + if(str == NULL) > Jie> + throw new NullPointerException(); > Jie> + > Jie> int length = str->length(); > > Why doesn't 'str->length()' throw the NPE? > > Tom > =========== The first mail, for adding Joel =========== Hi, When I use gcj on an RTOS(RTEMS), Double.parseDouble(null) throw NumberFormatException, but it should throw NullPointerException. So I add the patch below: Index: natVMDouble.cc =================================================================== --- natVMDouble.cc (revision 172224) +++ natVMDouble.cc (working copy) @@ -19,6 +19,7 @@ #include <java/lang/VMDouble.h> #include <java/lang/Character.h> #include <java/lang/NumberFormatException.h> +#include <java/lang/NullPointerException.h> #include <jvm.h> #include <stdio.h> @@ -162,6 +163,9 @@ jdouble java::lang::VMDouble::parseDouble(jstring str) { + if(str == NULL) + throw new NullPointerException(); + int length = str->length(); while (length > 0 The testsuite/Throw_2.java has been PASS after this patch. what do you think about this patch? Thanks, Jie