Print this page
rev 4505 : 8014189: JVM crash with SEGV in ConnectionGraph::record_for_escape_analysis()
Summary: Add NULL checks and asserts for Type::make_ptr() returned value.
Reviewed-by: kvn

Split Split Close
Expand all
Collapse all
          --- old/src/share/vm/opto/output.cpp
          +++ new/src/share/vm/opto/output.cpp
↓ open down ↓ 923 lines elided ↑ open up ↑
 924  924            scval = sv;
 925  925          }
 926  926        } else if( !obj_node->is_Con() ) {
 927  927          OptoReg::Name obj_reg = _regalloc->get_reg_first(obj_node);
 928  928          if( obj_node->bottom_type()->base() == Type::NarrowOop ) {
 929  929            scval = new_loc_value( _regalloc, obj_reg, Location::narrowoop );
 930  930          } else {
 931  931            scval = new_loc_value( _regalloc, obj_reg, Location::oop );
 932  932          }
 933  933        } else {
 934      -        const TypePtr *tp = obj_node->bottom_type()->make_ptr();
      934 +        const TypePtr *tp = obj_node->get_ptr_type();
 935  935          scval = new ConstantOopWriteValue(tp->is_oopptr()->const_oop()->constant_encoding());
 936  936        }
 937  937  
 938  938        OptoReg::Name box_reg = BoxLockNode::reg(box_node);
 939  939        Location basic_lock = Location::new_stk_loc(Location::normal,_regalloc->reg2offset(box_reg));
 940  940        bool eliminated = (box_node->is_BoxLock() && box_node->as_BoxLock()->is_eliminated());
 941  941        monarray->append(new MonitorValue(scval, basic_lock, eliminated));
 942  942      }
 943  943  
 944  944      // We dump the object pool first, since deoptimization reads it in first.
↓ open down ↓ 2056 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX