Mercurial > hg > graal-jvmci-8
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); |