diff -r cd1a170c9019 -r cdc493d7bc9a hotspot/src/share/vm/interpreter/linkResolver.cpp --- a/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Mar 24 11:50:51 2016 +0000 +++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp Thu Mar 24 16:21:18 2016 +0100 @@ -279,18 +279,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); + } } }