6951190: assert(!klass_is_exact(),"only non-exact klass") while building JDK
authornever
Mon May 10 14:58:38 2010 -0700 (3 years ago)
changeset 1713e8e83be27dd7
parent 1712359375cb7de6
child 17192ad074ba8456
child 1730df736661d0c8
6951190: assert(!klass_is_exact(),"only non-exact klass") while building JDK
Reviewed-by: kvn
src/share/vm/opto/library_call.cpp
--- a/src/share/vm/opto/library_call.cpp Fri May 07 15:13:00 2010 -0700
+++ b/src/share/vm/opto/library_call.cpp Mon May 10 14:58:38 2010 -0700
@@ -809,8 +809,7 @@ Node* LibraryCallKit::make_string_method
Node* no_ctrl = NULL;
ciInstanceKlass* klass = env()->String_klass();
- const TypeInstPtr* string_type =
- TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0);
+ const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
const TypeAryPtr* value_type =
TypeAryPtr::make(TypePtr::NotNull,
@@ -883,8 +882,7 @@ bool LibraryCallKit::inline_string_compa
}
ciInstanceKlass* klass = env()->String_klass();
- const TypeInstPtr* string_type =
- TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0);
+ const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
Node* no_ctrl = NULL;
// Get counts for string and argument
@@ -958,14 +956,16 @@ bool LibraryCallKit::inline_string_equal
}
}
- const TypeInstPtr* string_type =
- TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0);
+ const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
Node* no_ctrl = NULL;
Node* receiver_cnt;
Node* argument_cnt;
if (!stopped()) {
+ // Properly cast the argument to String
+ argument = _gvn.transform(new (C, 2) CheckCastPPNode(control(), argument, string_type));
+
// Get counts for string and argument
Node* receiver_cnta = basic_plus_adr(receiver, receiver, count_offset);
receiver_cnt = make_load(no_ctrl, receiver_cnta, TypeInt::INT, T_INT, string_type->add_offset(count_offset));
@@ -1090,7 +1090,7 @@ Node* LibraryCallKit::string_indexOf(Nod
const int offset_offset = java_lang_String::offset_offset_in_bytes();
ciInstanceKlass* klass = env()->String_klass();
- const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0);
+ const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
const TypeAryPtr* source_type = TypeAryPtr::make(TypePtr::NotNull, TypeAry::make(TypeInt::CHAR,TypeInt::POS), ciTypeArrayKlass::make(T_CHAR), true, 0);
Node* sourceOffseta = basic_plus_adr(string_object, string_object, offset_offset);
@@ -1199,8 +1199,7 @@ bool LibraryCallKit::inline_string_index
Node* no_ctrl = NULL;
ciInstanceKlass* klass = env()->String_klass();
- const TypeInstPtr* string_type =
- TypeInstPtr::make(TypePtr::BotPTR, klass, false, NULL, 0);
+ const TypeOopPtr* string_type = TypeOopPtr::make_from_klass(klass);
// Get counts for string and substr
Node* source_cnta = basic_plus_adr(receiver, receiver, count_offset);