1.1 --- a/src/share/vm/oops/constantPoolOop.cpp Thu Mar 03 19:51:36 2011 -0500 1.2 +++ b/src/share/vm/oops/constantPoolOop.cpp Thu Mar 03 19:52:23 2011 -0500 1.3 @@ -1175,8 +1175,15 @@ 1.4 1.5 case JVM_CONSTANT_UnresolvedClass: 1.6 { 1.7 - Symbol* k = from_cp->unresolved_klass_at(from_i); 1.8 - to_cp->unresolved_klass_at_put(to_i, k); 1.9 + // Can be resolved after checking tag, so check the slot first. 1.10 + CPSlot entry = from_cp->slot_at(from_i); 1.11 + if (entry.is_oop()) { 1.12 + assert(entry.get_oop()->is_klass(), "must be"); 1.13 + // Already resolved 1.14 + to_cp->klass_at_put(to_i, (klassOop)entry.get_oop()); 1.15 + } else { 1.16 + to_cp->unresolved_klass_at_put(to_i, entry.get_symbol()); 1.17 + } 1.18 } break; 1.19 1.20 case JVM_CONSTANT_UnresolvedClassInError: 1.21 @@ -1189,8 +1196,14 @@ 1.22 1.23 case JVM_CONSTANT_UnresolvedString: 1.24 { 1.25 - Symbol* s = from_cp->unresolved_string_at(from_i); 1.26 - to_cp->unresolved_string_at_put(to_i, s); 1.27 + // Can be resolved after checking tag, so check the slot first. 1.28 + CPSlot entry = from_cp->slot_at(from_i); 1.29 + if (entry.is_oop()) { 1.30 + // Already resolved (either string or pseudo-string) 1.31 + to_cp->string_at_put(to_i, entry.get_oop()); 1.32 + } else { 1.33 + to_cp->unresolved_string_at_put(to_i, entry.get_symbol()); 1.34 + } 1.35 } break; 1.36 1.37 case JVM_CONSTANT_Utf8: