comparison src/share/vm/classfile/verificationType.cpp @ 1803:60f88489896f

6975210: java.lang.VerifyError in some of JCK tests Summary: Naked oop in verificationType::is_reference_assignable_from() Reviewed-by: never, kvn, coleenp
author kamg
date Mon, 20 Sep 2010 15:38:04 -0400
parents a5c9d63a187d
children f95d63e2154a
comparison
equal deleted inserted replaced
1802:3babdb042f25 1803:60f88489896f
52 // We need check the class hierarchy to check assignability 52 // We need check the class hierarchy to check assignability
53 if (name() == vmSymbols::java_lang_Object()) { 53 if (name() == vmSymbols::java_lang_Object()) {
54 // any object or array is assignable to java.lang.Object 54 // any object or array is assignable to java.lang.Object
55 return true; 55 return true;
56 } 56 }
57 klassOop this_class = SystemDictionary::resolve_or_fail( 57 klassOop obj = SystemDictionary::resolve_or_fail(
58 name_handle(), Handle(THREAD, context->class_loader()), 58 name_handle(), Handle(THREAD, context->class_loader()),
59 Handle(THREAD, context->protection_domain()), true, CHECK_false); 59 Handle(THREAD, context->protection_domain()), true, CHECK_false);
60 if (this_class->klass_part()->is_interface()) { 60 KlassHandle this_class(THREAD, obj);
61
62 if (this_class->is_interface()) {
61 // We treat interfaces as java.lang.Object, including 63 // We treat interfaces as java.lang.Object, including
62 // java.lang.Cloneable and java.io.Serializable 64 // java.lang.Cloneable and java.io.Serializable
63 return true; 65 return true;
64 } else if (from.is_object()) { 66 } else if (from.is_object()) {
65 klassOop from_class = SystemDictionary::resolve_or_fail( 67 klassOop from_class = SystemDictionary::resolve_or_fail(
66 from.name_handle(), Handle(THREAD, context->class_loader()), 68 from.name_handle(), Handle(THREAD, context->class_loader()),
67 Handle(THREAD, context->protection_domain()), true, CHECK_false); 69 Handle(THREAD, context->protection_domain()), true, CHECK_false);
68 return instanceKlass::cast(from_class)->is_subclass_of(this_class); 70 return instanceKlass::cast(from_class)->is_subclass_of(this_class());
69 } 71 }
70 } else if (is_array() && from.is_array()) { 72 } else if (is_array() && from.is_array()) {
71 VerificationType comp_this = get_component(CHECK_false); 73 VerificationType comp_this = get_component(CHECK_false);
72 VerificationType comp_from = from.get_component(CHECK_false); 74 VerificationType comp_from = from.get_component(CHECK_false);
73 if (!comp_this.is_bogus() && !comp_from.is_bogus()) { 75 if (!comp_this.is_bogus() && !comp_from.is_bogus()) {