interpret.cc (continue1): [insn_invokevirtual] Do an explicit null pointer check.
authorJeff Sturm <jeff.sturm@commerceone.com>
Mon, 12 Feb 2001 17:30:00 +0000 (17:30 +0000)
committerTom Tromey <tromey@gcc.gnu.org>
Mon, 12 Feb 2001 17:30:00 +0000 (17:30 +0000)
2001-02-12  Jeff Sturm  <jeff.sturm@commerceone.com>
            Tom Tromey  <tromey@redhat.com>

* interpret.cc (continue1): [insn_invokevirtual] Do an explicit
null pointer check.

Co-Authored-By: Tom Tromey <tromey@redhat.com>
From-SVN: r39607

libjava/ChangeLog
libjava/interpret.cc

index 93a23bc..cfe7f4a 100644 (file)
@@ -1,3 +1,9 @@
+2001-02-12  Jeff Sturm  <jeff.sturm@commerceone.com>
+            Tom Tromey  <tromey@redhat.com>
+
+       * interpret.cc (continue1): [insn_invokevirtual] Do an explicit
+       null pointer check.
+
 2001-02-09  Tom Tromey  <tromey@redhat.com>
 
        * java/util/Timer.java: New version from Classpath.
index 0a069ac..aba1e2f 100644 (file)
@@ -1,6 +1,6 @@
 // interpret.cc - Code for the interpreter
 
-/* Copyright (C) 1999, 2000  Free Software Foundation
+/* Copyright (C) 1999, 2000, 2001  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -678,7 +678,11 @@ void _Jv_InterpMethod::continue1 (_Jv_InterpMethodInvocation *inv)
        rmeth = (_Jv_ResolvePoolEntry (defining_class, index)).rmethod;
 
        sp -= rmeth->stack_item_count;
-       NULLCHECK (sp[0].o);
+       // We don't use NULLCHECK here because we can't rely on that
+       // working if the method is final.  So instead we do an
+       // explicit test.
+       if (! sp[0].o)
+         throw new java::lang::NullPointerException ();
 
        if (rmeth->vtable_index == -1)
          {