< prev index next >

src/hotspot/share/opto/stringopts.cpp

Print this page
rev 48500 : 8194988: 8 Null pointer dereference defect groups related to MultiNode::proj_out()

*** 360,374 **** Compile* C = _stringopts->C; // Eliminate Initialize node. assert(init->outcnt() <= 2, "only a control and memory projection expected"); assert(init->req() <= InitializeNode::RawStores, "no pending inits"); ! Node *ctrl_proj = init->proj_out(TypeFunc::Control); if (ctrl_proj != NULL) { C->gvn_replace_by(ctrl_proj, init->in(TypeFunc::Control)); } ! Node *mem_proj = init->proj_out(TypeFunc::Memory); if (mem_proj != NULL) { Node *mem = init->in(TypeFunc::Memory); C->gvn_replace_by(mem_proj, mem); } C->gvn_replace_by(init, C->top()); --- 360,374 ---- Compile* C = _stringopts->C; // Eliminate Initialize node. assert(init->outcnt() <= 2, "only a control and memory projection expected"); assert(init->req() <= InitializeNode::RawStores, "no pending inits"); ! Node *ctrl_proj = init->proj_out_or_null(TypeFunc::Control); if (ctrl_proj != NULL) { C->gvn_replace_by(ctrl_proj, init->in(TypeFunc::Control)); } ! Node *mem_proj = init->proj_out_or_null(TypeFunc::Memory); if (mem_proj != NULL) { Node *mem = init->in(TypeFunc::Memory); C->gvn_replace_by(mem_proj, mem); } C->gvn_replace_by(init, C->top());
*** 889,899 **** if (n->is_Call()) { CallNode* cn = n->as_Call(); ctrl_path.push(cn); ctrl_path.push(cn->proj_out(0)); ctrl_path.push(cn->proj_out(0)->unique_out()); ! Node* catchproj = cn->proj_out(0)->unique_out()->as_Catch()->proj_out(0); if (catchproj != NULL) { ctrl_path.push(catchproj); } } else { ShouldNotReachHere(); --- 889,899 ---- if (n->is_Call()) { CallNode* cn = n->as_Call(); ctrl_path.push(cn); ctrl_path.push(cn->proj_out(0)); ctrl_path.push(cn->proj_out(0)->unique_out()); ! Node* catchproj = cn->proj_out(0)->unique_out()->as_Catch()->proj_out_or_null(0); if (catchproj != NULL) { ctrl_path.push(catchproj); } } else { ShouldNotReachHere();
*** 1033,1049 **** // Validate that all these results produced are contained within // this cluster of objects. First collect all the results produced // by calls in the region. _stringopts->_visited.Clear(); Node_List worklist; ! Node* final_result = _end->proj_out(TypeFunc::Parms); for (uint i = 0; i < _control.size(); i++) { CallNode* cnode = _control.at(i)->isa_Call(); if (cnode != NULL) { _stringopts->_visited.test_set(cnode->_idx); } ! Node* result = cnode != NULL ? cnode->proj_out(TypeFunc::Parms) : NULL; if (result != NULL && result != final_result) { worklist.push(result); } } --- 1033,1049 ---- // Validate that all these results produced are contained within // this cluster of objects. First collect all the results produced // by calls in the region. _stringopts->_visited.Clear(); Node_List worklist; ! Node* final_result = _end->proj_out_or_null(TypeFunc::Parms); for (uint i = 0; i < _control.size(); i++) { CallNode* cnode = _control.at(i)->isa_Call(); if (cnode != NULL) { _stringopts->_visited.test_set(cnode->_idx); } ! Node* result = cnode != NULL ? cnode->proj_out_or_null(TypeFunc::Parms) : NULL; if (result != NULL && result != final_result) { worklist.push(result); } }
< prev index next >