JDK-8014189 : JVM crash with SEGV in ConnectionGraph::record_for_escape_analysis()
  • Type: Bug
  • Status: Resolved
  • Resolution: Fixed
  • Component: hotspot
  • Sub-Component: compiler
  • Priority: P4
  • Affected Version: hs24,hs25,6u45
  • OS: generic
  • CPU: generic
  • Submit Date: 2013-05-08
  • Updated Date: 2013-06-26
  • Resolved Date: 2013-05-11
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availabitlity Release.

To download the current JDK release, click here.
JDK 6 JDK 7 JDK 8
6u60Fixed 7u40Fixed 8Resolved
Description
The process crashes with the following stack trace:
Stack: [0xffffffff77500000,0xffffffff77600000],  sp=0xffffffff775f9da0,  free
space=999k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native
code)
V  [libjvm.so+0x551708]  void
ConnectionGraph::record_for_escape_analysis(Node*,PhaseTransform*)+0xfb8
V  [libjvm.so+0x54e89c]  bool ConnectionGraph::compute_escape()+0x22c
V  [libjvm.so+0x54e610]  void
ConnectionGraph::do_analysis(Compile*,PhaseIterGVN*)+0xb0
V  [libjvm.so+0x246160]  void Compile::Optimize()+0x130
V  [libjvm.so+0x4c6da4]  
Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool)+0xd94
V  [libjvm.so+0x241360]  void
C2Compiler::compile_method(ciEnv*,ciMethod*,int)+0xa8
V  [libjvm.so+0x2420dc]  void
CompileBroker::invoke_compiler_on_method(CompileTask*)+0x89c
V  [libjvm.so+0x2b61fc]  void CompileBroker::compiler_thread_loop()+0x844
V  [libjvm.so+0x957c0c]  void JavaThread::thread_main_inner()+0x3c
V  [libjvm.so+0x866364]  java_start+0x164

The crash happens in this part of the code when the  adr_type returned by make_ptr is accessed. The  adr_type returned by make_ptr is NULL and that causes the crash.

     case Op_CompareAndSwapN:
2485     {
2486       const Type *adr_type = phase->type(n->in(MemNode::Address));
2487       adr_type = adr_type->make_ptr();
2488       if (adr_type->isa_oopptr()) {
2489         add_node(n, PointsToNode::UnknownType,
PointsToNode::UnknownEscape, false);
2490       } else {
2491         _processed.set(n->_idx);
2492         return;
2493       }
2494       break; 



Comments
Not reproducible. The fix is based on analysis of core file. Difficult to create regression test.
2013-05-09