diff -r c80f6ecb0bb3 -r 5f9eee6b383b hotspot/src/share/vm/interpreter/linkResolver.cpp --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Tue Mar 15 13:48:21 2016 -0700 +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Mar 17 19:04:01 2016 +0000 @@ -273,18 +273,25 @@ // Klass resolution void LinkResolver::check_klass_accessability(KlassHandle ref_klass, KlassHandle sel_klass, TRAPS) { - if (!Reflection::verify_class_access(ref_klass(), - sel_klass(), - true)) { + Reflection::VerifyClassAccessResults vca_result = + Reflection::verify_class_access(ref_klass(), sel_klass(), true); + if (vca_result != Reflection::ACCESS_OK) { ResourceMark rm(THREAD); - Exceptions::fthrow( - THREAD_AND_LOCATION, - vmSymbols::java_lang_IllegalAccessError(), - "tried to access class %s from class %s", - sel_klass->external_name(), - ref_klass->external_name() - ); - return; + char* msg = Reflection::verify_class_access_msg(ref_klass(), sel_klass(), vca_result); + if (msg == NULL) { + Exceptions::fthrow( + THREAD_AND_LOCATION, + vmSymbols::java_lang_IllegalAccessError(), + "failed to access class %s from class %s", + sel_klass->external_name(), + ref_klass->external_name()); + } else { + // Use module specific message returned by verify_class_access_msg(). + Exceptions::fthrow( + THREAD_AND_LOCATION, + vmSymbols::java_lang_IllegalAccessError(), + "%s", msg); + } } }