# HG changeset patch # User Thomas Wuerthinger # Date 1321880198 -3600 # Node ID d3d3dd0a34212a59341e7a954fdecae7d79debf0 # Parent 3b09031817ecbc0d385cfa70b085de28c6ad3528 Fixed a regression. diff -r 3b09031817ec -r d3d3dd0a3421 src/share/vm/graal/graalEnv.cpp --- a/src/share/vm/graal/graalEnv.cpp Mon Nov 21 11:01:37 2011 +0100 +++ b/src/share/vm/graal/graalEnv.cpp Mon Nov 21 13:56:38 2011 +0100 @@ -49,7 +49,7 @@ // // Note: the logic of this method should mirror the logic of // constantPoolOopDesc::verify_constant_pool_resolve. -bool GraalEnv::check_klass_accessibility(KlassHandle& accessing_klass, KlassHandle& resolved_klass) { +bool GraalEnv::check_klass_accessibility(KlassHandle accessing_klass, KlassHandle resolved_klass) { if (accessing_klass->oop_is_objArray()) { accessing_klass = objArrayKlass::cast(accessing_klass())->bottom_klass(); } @@ -203,13 +203,16 @@ if (k.is_null()) { is_accessible = false; } else if (k->class_loader() != accessor->class_loader() && - get_klass_by_name_impl(accessor, cpool, k->name(), true) == NULL) { + get_klass_by_name_impl(accessor, cpool, k->name(), true).is_null()) { // Loaded only remotely. Not linked yet. is_accessible = false; } else { // Linked locally, and we must also check public/private, etc. is_accessible = check_klass_accessibility(accessor, k); } + if (!is_accessible) { + return KlassHandle(); + } return k; } @@ -227,7 +230,8 @@ bool& is_accessible, KlassHandle& accessor) { ResourceMark rm; - return get_klass_by_index_impl(cpool, index, is_accessible, accessor); + KlassHandle result = get_klass_by_index_impl(cpool, index, is_accessible, accessor); + return result; } // ------------------------------------------------------------------ diff -r 3b09031817ec -r d3d3dd0a3421 src/share/vm/graal/graalEnv.hpp --- a/src/share/vm/graal/graalEnv.hpp Mon Nov 21 11:01:37 2011 +0100 +++ b/src/share/vm/graal/graalEnv.hpp Mon Nov 21 13:56:38 2011 +0100 @@ -91,7 +91,7 @@ instanceKlassHandle& loading_klass); // Helper methods - static bool check_klass_accessibility(KlassHandle& accessing_klass, KlassHandle& resolved_klassOop); + static bool check_klass_accessibility(KlassHandle accessing_klass, KlassHandle resolved_klassOop); static methodHandle lookup_method(instanceKlassHandle& accessor, instanceKlassHandle& holder, Symbol* name, diff -r 3b09031817ec -r d3d3dd0a3421 src/share/vm/graal/graalVMEntries.cpp --- a/src/share/vm/graal/graalVMEntries.cpp Mon Nov 21 11:01:37 2011 +0100 +++ b/src/share/vm/graal/graalVMEntries.cpp Mon Nov 21 13:56:38 2011 +0100 @@ -496,7 +496,7 @@ // public void RiConstantPool_loadReferencedType(long vmId, int cpi); JNIEXPORT void JNICALL Java_com_oracle_graal_hotspot_VMEntries_RiConstantPool_1loadReferencedType(JNIEnv *env, jobject, jobject type, jint index, jbyte op) { - TRACE_graal_3("VMEntries::RiConstantPool_lookupType"); + TRACE_graal_3("VMEntries::RiConstantPool_loadReferencedType"); VM_ENTRY_MARK; constantPoolOop cp = instanceKlass::cast(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(type)))->constants(); @@ -723,10 +723,12 @@ TRACE_graal_3("VMEntries::RiType_arrayOf"); VM_ENTRY_MARK; + tty->print_cr("entering"); KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotTypeResolved::javaMirror(klass))); - KlassHandle array = klass_handle->array_klass(THREAD); - Handle name = VmIds::toString(array->name(), CHECK_NULL); - return JNIHandles::make_local(THREAD, GraalCompiler::createHotSpotTypeResolved(array, name, THREAD)()); + KlassHandle arr = klass_handle->array_klass(THREAD); + Handle name = VmIds::toString(arr->name(), CHECK_NULL); + assert(arr->oop_is_array(), ""); + return JNIHandles::make_local(THREAD, GraalCompiler::createHotSpotTypeResolved(arr, name, THREAD)()); } // public RiField[] RiType_fields(HotSpotTypeResolved klass);