changeset 18010:d6fcbd1e1075

Merge
author asaha
date Mon, 02 Jun 2014 15:18:10 -0700
parents f73af4455d7d (current diff) e6b738407432 (diff)
children 4941bd9f6483 ec8878dc470d
files make/hotspot_version 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	Thu May 29 09:56:06 2014 -0700
+++ b/src/share/vm/classfile/verifier.cpp	Mon Jun 02 15:18:10 2014 -0700
@@ -2310,21 +2310,19 @@
       Method* m = InstanceKlass::cast(ref_klass)->uncached_lookup_method(
         vmSymbols::object_initializer_name(),
         cp->signature_ref_at(bcs->get_index_u2()), Klass::normal);
-      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, 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, 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;
+          }
         }
       }
     }