United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7129618 assert(obj_node->eqv_uncast(obj),"");
JDK-7129618 : assert(obj_node->eqv_uncast(obj),"");

Details
Type:
Bug
Submit Date:
2012-01-12
Status:
Closed
Updated Date:
2012-03-29
Project Name:
JDK
Resolved Date:
2012-03-29
Component:
hotspot
OS:
generic
Sub-Component:
compiler
CPU:
generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
8-pool
Fixed Versions:
hs23 (b10)

Related Reports
Backport:
Backport:
Backport:
Backport:
Relates:
Relates:
Relates:
Relates:

Sub Tasks

Description
I ran additional tests (nsk.jdi) which failed during Nightly and found that they still failing next assert in BoxLockNode::is_simple_lock_region() even after fix for 7128352:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/tmp/jprt/P1/022523.vkozlov/source/src/share/vm/opto/locknode.cpp:138), pid=8678, tid=16
#  assert(obj_node->eqv_uncast(obj)) failed: 
#
# JRE version: 7.0_04-b06
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0-b10-internal-201201110225.vkozlov.7128352-fastdebug mixed mode solaris-amd64 )
# Core dump written. Default location: /export/local/57451.JDK7.NIGHTLY.VM_solaris-amd64_vm_server_compd_nsk.quick-jdi.testlist/results/ResultDir/object001/core or core.8678
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0000000000fe3000):  JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=16, stack(0xfffffd7ffde7d000,0xfffffd7ffdf7d000)]

Stack: [0xfffffd7ffde7d000,0xfffffd7ffdf7d000],  sp=0xfffffd7ffdf73350,  free space=984k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x277b354]  void VMError::report(outputStream*)+0x8c8;;  void VMError::report(outputStream*)+0x8c8
V  [libjvm.so+0x277c499]  void VMError::report_and_die()+0x4fd;;  void VMError::report_and_die()+0x4fd
V  [libjvm.so+0xee5127]  void report_vm_error(const char*,int,const char*,const char*)+0x55f;;  void report_vm_error(const char*,int,const char*,const char*)+0x55f
V  [libjvm.so+0x1db07ac]  bool BoxLockNode::is_simple_lock_region(LockNode**,Node*)+0x87c;;  bool BoxLockNode::is_simple_lock_region(LockNode**,Node*)+0x87c
V  [libjvm.so+0xae1d68]  bool LockNode::is_nested_lock_region()+0x80;;  bool LockNode::is_nested_lock_region()+0x80
V  [libjvm.so+0x1e7ca60]  void PhaseMacroExpand::eliminate_macro_nodes()+0x2c4;;  void PhaseMacroExpand::eliminate_macro_nodes()+0x2c4
V  [libjvm.so+0xd3ffa7]  void Compile::Optimize()+0x5ff;;  void Compile::Optimize()+0x5ff
V  [libjvm.so+0xd37a84]  Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool)+0x14c4;;  Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool)+0x14c4
V  [libjvm.so+0xabb8a7]  void C2Compiler::compile_method(ciEnv*,ciMethod*,int)+0x16b;;  void C2Compiler::compile_method(ciEnv*,ciMethod*,int)+0x16b
V  [libjvm.so+0xd5ff27]  void CompileBroker::invoke_compiler_on_method(CompileTask*)+0x14cb;;  void CompileBroker::invoke_compiler_on_method(CompileTask*)+0x14cb
V  [libjvm.so+0xd5ddff]  void CompileBroker::compiler_thread_loop()+0xc8f;;  void CompileBroker::compiler_thread_loop()+0xc8f
V  [libjvm.so+0x2638c94]  void JavaThread::thread_main_inner()+0x4d4;;  void JavaThread::thread_main_inner()+0x4d4
V  [libjvm.so+0x26385a6]  void JavaThread::run()+0x61e;;  void JavaThread::run()+0x61e
V  [libjvm.so+0x21d6eee]  java_start+0x6a6;;  java_start+0x6a6
C  [libc.so.1+0x121021]  _thrp_setup+0xa5;;  _thrp_setup+0xa5
C  [libc.so.1+0x1212c0]  _lwp_start+0x0;;  _lwp_start+0x0


Current CompileTask:
C2:  27735  571             com.sun.tools.jdi.EventRequestManagerImpl$EventRequestImpl::enable (6 bytes)

                                    
                                
I ran additional tests (nsk.jdi) which failed during Nightly and found that they still failing next assert in BoxLockNode::is_simple_lock_region() even after fix for 7128352:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/tmp/jprt/P1/022523.vkozlov/source/src/share/vm/opto/locknode.cpp:138), pid=8678, tid=16
#  assert(obj_node->eqv_uncast(obj)) failed: 
#
# JRE version: 7.0_04-b06
# Java VM: Java HotSpot(TM) 64-Bit Server VM (23.0-b10-internal-201201110225.vkozlov.7128352-fastdebug mixed mode solaris-amd64 )
# Core dump written. Default location: /export/local/57451.JDK7.NIGHTLY.VM_solaris-amd64_vm_server_compd_nsk.quick-jdi.testlist/results/ResultDir/object001/core or core.8678
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0000000000fe3000):  JavaThread "C2 CompilerThread1" daemon [_thread_in_native, id=16, stack(0xfffffd7ffde7d000,0xfffffd7ffdf7d000)]

Stack: [0xfffffd7ffde7d000,0xfffffd7ffdf7d000],  sp=0xfffffd7ffdf73350,  free space=984k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x277b354]  void VMError::report(outputStream*)+0x8c8;;  void VMError::report(outputStream*)+0x8c8
V  [libjvm.so+0x277c499]  void VMError::report_and_die()+0x4fd;;  void VMError::report_and_die()+0x4fd
V  [libjvm.so+0xee5127]  void report_vm_error(const char*,int,const char*,const char*)+0x55f;;  void report_vm_error(const char*,int,const char*,const char*)+0x55f
V  [libjvm.so+0x1db07ac]  bool BoxLockNode::is_simple_lock_region(LockNode**,Node*)+0x87c;;  bool BoxLockNode::is_simple_lock_region(LockNode**,Node*)+0x87c
V  [libjvm.so+0xae1d68]  bool LockNode::is_nested_lock_region()+0x80;;  bool LockNode::is_nested_lock_region()+0x80
V  [libjvm.so+0x1e7ca60]  void PhaseMacroExpand::eliminate_macro_nodes()+0x2c4;;  void PhaseMacroExpand::eliminate_macro_nodes()+0x2c4
V  [libjvm.so+0xd3ffa7]  void Compile::Optimize()+0x5ff;;  void Compile::Optimize()+0x5ff
V  [libjvm.so+0xd37a84]  Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool)+0x14c4;;  Compile::Compile(ciEnv*,C2Compiler*,ciMethod*,int,bool,bool)+0x14c4
V  [libjvm.so+0xabb8a7]  void C2Compiler::compile_method(ciEnv*,ciMethod*,int)+0x16b;;  void C2Compiler::compile_method(ciEnv*,ciMethod*,int)+0x16b
V  [libjvm.so+0xd5ff27]  void CompileBroker::invoke_compiler_on_method(CompileTask*)+0x14cb;;  void CompileBroker::invoke_compiler_on_method(CompileTask*)+0x14cb
V  [libjvm.so+0xd5ddff]  void CompileBroker::compiler_thread_loop()+0xc8f;;  void CompileBroker::compiler_thread_loop()+0xc8f
V  [libjvm.so+0x2638c94]  void JavaThread::thread_main_inner()+0x4d4;;  void JavaThread::thread_main_inner()+0x4d4
V  [libjvm.so+0x26385a6]  void JavaThread::run()+0x61e;;  void JavaThread::run()+0x61e
V  [libjvm.so+0x21d6eee]  java_start+0x6a6;;  java_start+0x6a6
C  [libc.so.1+0x121021]  _thrp_setup+0xa5;;  _thrp_setup+0xa5
C  [libc.so.1+0x1212c0]  _lwp_start+0x0;;  _lwp_start+0x0


Current CompileTask:
C2:  27735  571             com.sun.tools.jdi.EventRequestManagerImpl$EventRequestImpl::enable (6 bytes)

                                    

Comments
EVALUATION

The assert verifies that safepoint references the same object as locks in simple lock region. It failed because SFP references Phi node of different CheckCastPP nodes of that object so uncast() did not help.

=====monitor info has different obj=====
obj:
 3      Start   ===  3  0  [[ 3  5  6  7  8  9  10  11 ]]  #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR, 4:return_address, 5:com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull *, 6:bool}
 10     Parm    ===  3  [[ 855  845  21  835  22  22  22  810  800  34  34  789  777  44  44  715  267  252  252  77  77  824  583  543  527  507  483  97  97  465  404  375  125  383  126  126  126  126  350  299  137  137  299  299  148  148  148  167  167  167  299  284  203  203  203  276  276  299  274  224  224  224  274  295  267  267  252 ]] Parm0: com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull * !jvms: EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:-1

obj uncast:
 10     Parm    ===  3  [[ 855  845  21  835  22  22  22  810  800  34  34  789  777  44  44  715  267  252  252  77  77  824  583  543  527  507  483  97  97  465  404  375  125  383  126  126  126  126  350  299  137  137  299  299  148  148  148  167  167  167  299  284  203  203  203  276  276  299  274  224  224  224  274  295  267  267  252 ]] Parm0: com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull * !jvms: EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:-1

obj_node:
 295    CheckCastPP     ===  891  10  [[ 330 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$ModificationWatchpointRequestImpl:NotNull:exact *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$ModificationWatchpointRequestImpl:NotNull:exact * !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:34 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
 284    CheckCastPP     ===  895  10  [[ 330 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$AccessWatchpointRequestImpl:NotNull:exact *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$AccessWatchpointRequestImpl:NotNull:exact * !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:34 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
 328    Region  ===  328  895  891  [[ 328  350  332  330 ]]  !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:-1 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
 330    Phi     ===  328  284  295  [[ 767  789  715  337  337  771  771  767  350  350  350  715  715  583  383  383  383  375  375  375  404  404  404  465  465  465  483  483  483  507  507  507  527  527  527  543  543  543  583  583 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull * !orig=[785] !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:-1 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35

obj_node uncast:
 330    Phi     ===  328  284  295  [[ 767  789  715  337  337  771  771  767  350  350  350  715  715  583  383  383  383  375  375  375  404  404  404  465  465  465  483  483  483  507  507  507  527  527  527  543  543  543  583  583 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull * !orig=[785] !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:-1 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
                                     
2012-01-12
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/89d0a5d40008
                                     
2012-01-14
EVALUATION

Relax verification and locks elimination checks for new implementation (EliminateNestedLocks).

Don't verify safepoints monitor info in is_simple_lock_region() since the referenced node could be different from the locked object. It could be Phi node of different cast nodes which point to this locked object. We assume that no other objects could be referenced in monitor info associated with this BoxLock node because in verified case all associated locks and unlocks are referencing only this one object.

New implementation has separate BoxLock node for each locked region so mark all associated locks/unlocks as eliminated in mark_eliminated_box() even if different objects are referenced in one locked region (for example, OSR compilation of nested loop inside locked scope).
                                     
2012-01-14
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/89d0a5d40008
                                     
2012-01-18
EVALUATION

http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/89d0a5d40008
                                     
2012-03-22
EVALUATION

The assert verifies that safepoint references the same object as locks in simple lock region. It failed because SFP references Phi node of different CheckCastPP nodes of that object so uncast() did not help.

=====monitor info has different obj=====
obj:
 3      Start   ===  3  0  [[ 3  5  6  7  8  9  10  11 ]]  #{0:control, 1:abIO, 2:memory, 3:rawptr:BotPTR, 4:return_address, 5:com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull *, 6:bool}
 10     Parm    ===  3  [[ 855  845  21  835  22  22  22  810  800  34  34  789  777  44  44  715  267  252  252  77  77  824  583  543  527  507  483  97  97  465  404  375  125  383  126  126  126  126  350  299  137  137  299  299  148  148  148  167  167  167  299  284  203  203  203  276  276  299  274  224  224  224  274  295  267  267  252 ]] Parm0: com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull * !jvms: EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:-1

obj uncast:
 10     Parm    ===  3  [[ 855  845  21  835  22  22  22  810  800  34  34  789  777  44  44  715  267  252  252  77  77  824  583  543  527  507  483  97  97  465  404  375  125  383  126  126  126  126  350  299  137  137  299  299  148  148  148  167  167  167  299  284  203  203  203  276  276  299  274  224  224  224  274  295  267  267  252 ]] Parm0: com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$EventRequestImpl:NotNull * !jvms: EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:-1

obj_node:
 295    CheckCastPP     ===  891  10  [[ 330 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$ModificationWatchpointRequestImpl:NotNull:exact *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$ModificationWatchpointRequestImpl:NotNull:exact * !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:34 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
 284    CheckCastPP     ===  895  10  [[ 330 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$AccessWatchpointRequestImpl:NotNull:exact *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$AccessWatchpointRequestImpl:NotNull:exact * !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:34 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
 328    Region  ===  328  895  891  [[ 328  350  332  330 ]]  !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:-1 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
 330    Phi     ===  328  284  295  [[ 767  789  715  337  337  771  771  767  350  350  350  715  715  583  383  383  383  375  375  375  404  404  404  465  465  465  483  483  483  507  507  507  527  527  527  543  543  543  583  583 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull * !orig=[785] !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:-1 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35

obj_node uncast:
 330    Phi     ===  328  284  295  [[ 767  789  715  337  337  771  771  767  350  350  350  715  715  583  383  383  383  375  375  375  404  404  404  465  465  465  483  483  483  507  507  507  527  527  527  543  543  543  583  583 ]]  #com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull *  Oop:com/sun/tools/jdi/EventRequestManagerImpl$WatchpointRequestImpl:NotNull * !orig=[785] !jvms: EventRequestManagerImpl$EventRequestImpl::set @ bci:-1 EventRequestManagerImpl$EventRequestImpl::setEnabled @ bci:35
                                     
2012-01-12
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/89d0a5d40008
                                     
2012-01-14
EVALUATION

Relax verification and locks elimination checks for new implementation (EliminateNestedLocks).

Don't verify safepoints monitor info in is_simple_lock_region() since the referenced node could be different from the locked object. It could be Phi node of different cast nodes which point to this locked object. We assume that no other objects could be referenced in monitor info associated with this BoxLock node because in verified case all associated locks and unlocks are referencing only this one object.

New implementation has separate BoxLock node for each locked region so mark all associated locks/unlocks as eliminated in mark_eliminated_box() even if different objects are referenced in one locked region (for example, OSR compilation of nested loop inside locked scope).
                                     
2012-01-14
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/89d0a5d40008
                                     
2012-01-18
EVALUATION

http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/89d0a5d40008
                                     
2012-03-22



Hardware and Software, Engineered to Work Together