comparison src/share/vm/opto/library_call.cpp @ 1844:75588558f1bf

6980792: Crash "exception happened outside interpreter, nmethods and vtable stubs (1)" Reviewed-by: kvn
author never
date Thu, 07 Oct 2010 21:40:55 -0700
parents 3e8fbc61cee8
children f95d63e2154a
comparison
equal deleted inserted replaced
1832:22e4420d19f7 1844:75588558f1bf
4759 Node* n1 = LoadKlassNode::make(_gvn, immutable_memory(), p1, TypeRawPtr::BOTTOM); 4759 Node* n1 = LoadKlassNode::make(_gvn, immutable_memory(), p1, TypeRawPtr::BOTTOM);
4760 Node* dest_elem_klass = _gvn.transform(n1); 4760 Node* dest_elem_klass = _gvn.transform(n1);
4761 Node* cv = generate_checkcast_arraycopy(adr_type, 4761 Node* cv = generate_checkcast_arraycopy(adr_type,
4762 dest_elem_klass, 4762 dest_elem_klass,
4763 src, src_offset, dest, dest_offset, 4763 src, src_offset, dest, dest_offset,
4764 copy_length); 4764 ConvI2X(copy_length));
4765 if (cv == NULL) cv = intcon(-1); // failure (no stub available) 4765 if (cv == NULL) cv = intcon(-1); // failure (no stub available)
4766 checked_control = control(); 4766 checked_control = control();
4767 checked_i_o = i_o(); 4767 checked_i_o = i_o();
4768 checked_mem = memory(adr_type); 4768 checked_mem = memory(adr_type);
4769 checked_value = cv; 4769 checked_value = cv;
5204 // look in each non-null element's class, at the desired klass's 5204 // look in each non-null element's class, at the desired klass's
5205 // super_check_offset, for the desired klass. 5205 // super_check_offset, for the desired klass.
5206 int sco_offset = Klass::super_check_offset_offset_in_bytes() + sizeof(oopDesc); 5206 int sco_offset = Klass::super_check_offset_offset_in_bytes() + sizeof(oopDesc);
5207 Node* p3 = basic_plus_adr(dest_elem_klass, sco_offset); 5207 Node* p3 = basic_plus_adr(dest_elem_klass, sco_offset);
5208 Node* n3 = new(C, 3) LoadINode(NULL, memory(p3), p3, _gvn.type(p3)->is_ptr()); 5208 Node* n3 = new(C, 3) LoadINode(NULL, memory(p3), p3, _gvn.type(p3)->is_ptr());
5209 Node* check_offset = _gvn.transform(n3); 5209 Node* check_offset = ConvI2X(_gvn.transform(n3));
5210 Node* check_value = dest_elem_klass; 5210 Node* check_value = dest_elem_klass;
5211 5211
5212 Node* src_start = array_element_address(src, src_offset, T_OBJECT); 5212 Node* src_start = array_element_address(src, src_offset, T_OBJECT);
5213 Node* dest_start = array_element_address(dest, dest_offset, T_OBJECT); 5213 Node* dest_start = array_element_address(dest, dest_offset, T_OBJECT);
5214 5214