comparison src/share/vm/oops/constantPoolOop.cpp @ 2332:fbbeec6dad2d

6512830: Error: assert(tag_at(which).is_unresolved_klass(), "Corrupted constant pool") Summary: Redefine classes copies the constant pool while the constant pool may be resolving strings or classes Reviewed-by: dcubed, dsamersoff, acorn
author coleenp
date Thu, 03 Mar 2011 19:52:23 -0500
parents 3582bf76420e
children c7f3d0b4570f
comparison
equal deleted inserted replaced
2331:9f44e9aad2d9 2332:fbbeec6dad2d
1173 to_cp->string_index_at_put(to_i, si); 1173 to_cp->string_index_at_put(to_i, si);
1174 } break; 1174 } break;
1175 1175
1176 case JVM_CONSTANT_UnresolvedClass: 1176 case JVM_CONSTANT_UnresolvedClass:
1177 { 1177 {
1178 Symbol* k = from_cp->unresolved_klass_at(from_i); 1178 // Can be resolved after checking tag, so check the slot first.
1179 to_cp->unresolved_klass_at_put(to_i, k); 1179 CPSlot entry = from_cp->slot_at(from_i);
1180 if (entry.is_oop()) {
1181 assert(entry.get_oop()->is_klass(), "must be");
1182 // Already resolved
1183 to_cp->klass_at_put(to_i, (klassOop)entry.get_oop());
1184 } else {
1185 to_cp->unresolved_klass_at_put(to_i, entry.get_symbol());
1186 }
1180 } break; 1187 } break;
1181 1188
1182 case JVM_CONSTANT_UnresolvedClassInError: 1189 case JVM_CONSTANT_UnresolvedClassInError:
1183 { 1190 {
1184 Symbol* k = from_cp->unresolved_klass_at(from_i); 1191 Symbol* k = from_cp->unresolved_klass_at(from_i);
1187 } break; 1194 } break;
1188 1195
1189 1196
1190 case JVM_CONSTANT_UnresolvedString: 1197 case JVM_CONSTANT_UnresolvedString:
1191 { 1198 {
1192 Symbol* s = from_cp->unresolved_string_at(from_i); 1199 // Can be resolved after checking tag, so check the slot first.
1193 to_cp->unresolved_string_at_put(to_i, s); 1200 CPSlot entry = from_cp->slot_at(from_i);
1201 if (entry.is_oop()) {
1202 // Already resolved (either string or pseudo-string)
1203 to_cp->string_at_put(to_i, entry.get_oop());
1204 } else {
1205 to_cp->unresolved_string_at_put(to_i, entry.get_symbol());
1206 }
1194 } break; 1207 } break;
1195 1208
1196 case JVM_CONSTANT_Utf8: 1209 case JVM_CONSTANT_Utf8:
1197 { 1210 {
1198 Symbol* s = from_cp->symbol_at(from_i); 1211 Symbol* s = from_cp->symbol_at(from_i);