Tue, 19 Mar 2013 16:31:10 -0700
Merge
1.1 --- a/src/share/vm/oops/generateOopMap.cpp Tue Mar 19 10:56:33 2013 -0700 1.2 +++ b/src/share/vm/oops/generateOopMap.cpp Tue Mar 19 16:31:10 2013 -0700 1.3 @@ -762,6 +762,7 @@ 1.4 // monitor matching is purely informational and doesn't say anything 1.5 // about the correctness of the code. 1.6 void GenerateOopMap::merge_state_into_bb(BasicBlock *bb) { 1.7 + guarantee(bb != NULL, "null basicblock"); 1.8 assert(bb->is_alive(), "merging state into a dead basicblock"); 1.9 1.10 if (_stack_top == bb->_stack_top) { 1.11 @@ -1189,6 +1190,7 @@ 1.12 1.13 if (start_pc <= bci && bci < end_pc) { 1.14 BasicBlock *excBB = get_basic_block_at(handler_pc); 1.15 + guarantee(excBB != NULL, "no basic block for exception"); 1.16 CellTypeState *excStk = excBB->stack(); 1.17 CellTypeState *cOpStck = stack(); 1.18 CellTypeState cOpStck_0 = cOpStck[0]; 1.19 @@ -1803,6 +1805,7 @@ 1.20 // possibility that this bytecode will throw an 1.21 // exception. 1.22 BasicBlock* bb = get_basic_block_containing(bci); 1.23 + guarantee(bb != NULL, "no basic block for bci"); 1.24 bb->set_changed(true); 1.25 bb->_monitor_top = bad_monitors; 1.26 1.27 @@ -2190,6 +2193,7 @@ 1.28 1.29 // Find basicblock and report results 1.30 BasicBlock* bb = get_basic_block_containing(bci); 1.31 + guarantee(bb != NULL, "no basic block for bci"); 1.32 assert(bb->is_reachable(), "getting result from unreachable basicblock"); 1.33 bb->set_changed(true); 1.34 interp_bb(bb);
2.1 --- a/src/share/vm/opto/loopnode.hpp Tue Mar 19 10:56:33 2013 -0700 2.2 +++ b/src/share/vm/opto/loopnode.hpp Tue Mar 19 16:31:10 2013 -0700 2.3 @@ -603,7 +603,10 @@ 2.4 } 2.5 2.6 public: 2.7 - bool has_node( Node* n ) const { return _nodes[n->_idx] != NULL; } 2.8 + bool has_node( Node* n ) const { 2.9 + guarantee(n != NULL, "No Node."); 2.10 + return _nodes[n->_idx] != NULL; 2.11 + } 2.12 // check if transform created new nodes that need _ctrl recorded 2.13 Node *get_late_ctrl( Node *n, Node *early ); 2.14 Node *get_early_ctrl( Node *n ); 2.15 @@ -737,7 +740,8 @@ 2.16 return n; 2.17 } 2.18 uint dom_depth(Node* d) const { 2.19 - assert(d->_idx < _idom_size, ""); 2.20 + guarantee(d != NULL, "Null dominator info."); 2.21 + guarantee(d->_idx < _idom_size, ""); 2.22 return _dom_depth[d->_idx]; 2.23 } 2.24 void set_idom(Node* d, Node* n, uint dom_depth);
3.1 --- a/src/share/vm/opto/loopopts.cpp Tue Mar 19 10:56:33 2013 -0700 3.2 +++ b/src/share/vm/opto/loopopts.cpp Tue Mar 19 16:31:10 2013 -0700 3.3 @@ -232,7 +232,11 @@ 3.4 // Loop predicates may have depending checks which should not 3.5 // be skipped. For example, range check predicate has two checks 3.6 // for lower and upper bounds. 3.7 - ProjNode* unc_proj = iff->as_If()->proj_out(1 - dp->as_Proj()->_con)->as_Proj(); 3.8 + if (dp == NULL) 3.9 + return; 3.10 + 3.11 + ProjNode* dp_proj = dp->as_Proj(); 3.12 + ProjNode* unc_proj = iff->as_If()->proj_out(1 - dp_proj->_con)->as_Proj(); 3.13 if (exclude_loop_predicate && 3.14 is_uncommon_trap_proj(unc_proj, Deoptimization::Reason_predicate)) 3.15 return; // Let IGVN transformation change control dependence. 3.16 @@ -866,8 +870,11 @@ 3.17 3.18 // Now split the bool up thru the phi 3.19 Node *bolphi = split_thru_phi( bol, n_ctrl, -1 ); 3.20 + guarantee(bolphi != NULL, "null boolean phi node"); 3.21 + 3.22 _igvn.replace_node( bol, bolphi ); 3.23 assert( iff->in(1) == bolphi, "" ); 3.24 + 3.25 if( bolphi->Value(&_igvn)->singleton() ) 3.26 return; 3.27 3.28 @@ -1628,6 +1635,7 @@ 3.29 //------------------------------ short_circuit_if ------------------------------------- 3.30 // Force the iff control output to be the live_proj 3.31 Node* PhaseIdealLoop::short_circuit_if(IfNode* iff, ProjNode* live_proj) { 3.32 + guarantee(live_proj != NULL, "null projection"); 3.33 int proj_con = live_proj->_con; 3.34 assert(proj_con == 0 || proj_con == 1, "false or true projection"); 3.35 Node *con = _igvn.intcon(proj_con); 3.36 @@ -1686,6 +1694,7 @@ 3.37 set_idom(proj, new_if, ddepth); 3.38 3.39 ProjNode* new_exit = proj_clone(other_proj, new_if)->as_Proj(); 3.40 + guarantee(new_exit != NULL, "null exit node"); 3.41 register_node(new_exit, get_loop(other_proj), new_if, ddepth); 3.42 3.43 return new_exit; 3.44 @@ -1793,7 +1802,10 @@ 3.45 int stride = stride_of_possible_iv(if_cmpu); 3.46 if (stride == 0) return NULL; 3.47 3.48 - ProjNode* lp_continue = stay_in_loop(if_cmpu, loop)->as_Proj(); 3.49 + Node* lp_proj = stay_in_loop(if_cmpu, loop); 3.50 + guarantee(lp_proj != NULL, "null loop node"); 3.51 + 3.52 + ProjNode* lp_continue = lp_proj->as_Proj(); 3.53 ProjNode* lp_exit = if_cmpu->proj_out(!lp_continue->is_IfTrue())->as_Proj(); 3.54 3.55 Node* limit = NULL; 3.56 @@ -1805,6 +1817,7 @@ 3.57 } 3.58 // Create a new region on the exit path 3.59 RegionNode* reg = insert_region_before_proj(lp_exit); 3.60 + guarantee(reg != NULL, "null region node"); 3.61 3.62 // Clone the if-cmpu-true-false using a signed compare 3.63 BoolTest::mask rel_i = stride > 0 ? bol->_test._test : BoolTest::ge;