changeset 6734:1fa005fb28f5

8043454: Test case for 8037157 should not throw a VerifyError Summary: Don't throw VerifyError if method is NULL. Reviewed-by: acorn, lfoltan, mschoene
author hseigel
date Wed, 28 May 2014 08:09:26 -0400
parents fbf689f3752e
children 3b0fe4ec6ebe 54bc75c144b0
files src/share/vm/classfile/verifier.cpp
diffstat 1 files changed, 13 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/classfile/verifier.cpp	Tue May 20 19:50:58 2014 -0700
+++ b/src/share/vm/classfile/verifier.cpp	Wed May 28 08:09:26 2014 -0400
@@ -2307,21 +2307,19 @@
       Method* m = InstanceKlass::cast(ref_klass)->uncached_lookup_method(
         vmSymbols::object_initializer_name(),
         cp->signature_ref_at(bcs->get_index_u2()));
-      if (m == NULL) {
-        verify_error(ErrorContext::bad_code(bci),
-            "Call to missing <init> method");
-        return;
-      }
-      instanceKlassHandle mh(THREAD, m->method_holder());
-      if (m->is_protected() && !mh->is_same_class_package(_klass())) {
-        bool assignable = current_type().is_assignable_from(
-          objectref_type, this, true, CHECK_VERIFY(this));
-        if (!assignable) {
-          verify_error(ErrorContext::bad_type(bci,
-              TypeOrigin::cp(new_class_index, objectref_type),
-              TypeOrigin::implicit(current_type())),
-              "Bad access to protected <init> method");
-          return;
+      // Do nothing if method is not found.  Let resolution detect the error.
+      if (m != NULL) {
+        instanceKlassHandle mh(THREAD, m->method_holder());
+        if (m->is_protected() && !mh->is_same_class_package(_klass())) {
+          bool assignable = current_type().is_assignable_from(
+            objectref_type, this, true, CHECK_VERIFY(this));
+          if (!assignable) {
+            verify_error(ErrorContext::bad_type(bci,
+                TypeOrigin::cp(new_class_index, objectref_type),
+                TypeOrigin::implicit(current_type())),
+                "Bad access to protected <init> method");
+            return;
+          }
         }
       }
     }