changeset 3674:d3d3dd0a3421

Fixed a regression.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Mon, 21 Nov 2011 13:56:38 +0100
parents 3b09031817ec
children 3a05d8465ff1
files src/share/vm/graal/graalEnv.cpp src/share/vm/graal/graalEnv.hpp src/share/vm/graal/graalVMEntries.cpp
diffstat 3 files changed, 14 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
 
 // ------------------------------------------------------------------
--- 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,
--- 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<Handle>(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<Handle>(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);