JDK-8155241 : Crash with assert in Xcomp mode and with disabled ReduceBulkZeroing
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 9
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2016-04-27
  • Updated: 2016-06-09
  • Resolved: 2016-05-12
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 Availability Release.

To download the current JDK release, click here.
JDK 9
9 b122Fixed
Related Reports
Relates :  
Description
Java fastdebug build crashes with assert in Xcomp mode and with disabled ReduceBulkZeroing:
java -Xcomp -XX:-ReduceBulkZeroing
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/HUDSON/workspace/9-2-build-linux-amd64/jdk9/2755/hotspot/src/share/vm/opto/memnode.cpp:523), pid=4155, tid=0x00007f07f7831700
#  assert(alloc != __null && alloc->initialization()->is_complete_with_arraycopy()) failed: broken allocation
#
# JRE version: Java(TM) SE Runtime Environment (9.0-b66) (build 1.9.0-ea-fastdebug-b66)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.9.0-ea-fastdebug-b66 compiled mode linux-amd64 compressed oops)
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %P" (or dumping to /home/dmitry/bundles/jdk9/b66/jdk1.9.0/fastdebug/bin/core.4155)
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

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

Current thread (0x00007f0810145000):  JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=4163, stack(0x00007f07f7731000,0x00007f07f7832000)]

Stack: [0x00007f07f7731000,0x00007f07f7832000],  sp=0x00007f07f782c200,  free space=1004k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x10db48f]  VMError::report_and_die()+0x14f
V  [libjvm.so+0x7cf8fb]  report_vm_error(char const*, int, char const*, char const*)+0x7b
V  [libjvm.so+0xd568b2]  LoadNode::find_previous_arraycopy(PhaseTransform*, Node*, Node*&, bool) const+0x4f2
V  [libjvm.so+0xd65447]  MemNode::find_previous_store(PhaseTransform*)+0x107
V  [libjvm.so+0xd6617b]  LoadNode::Ideal(PhaseGVN*, bool)+0x5ab
V  [libjvm.so+0xeb3f41]  PhaseIterGVN::transform_old(Node*)+0xb1
V  [libjvm.so+0xeaf1f2]  PhaseIterGVN::optimize()+0x82
V  [libjvm.so+0xcb57a1]  PhaseIdealLoop::build_and_optimize(bool, bool)+0x1191
V  [libjvm.so+0x750a23]  Compile::Optimize()+0x4c3
V  [libjvm.so+0x75276b]  Compile::Compile(ciEnv*, C2Compiler*, ciMethod*, int, bool, bool, bool)+0x137b
V  [libjvm.so+0x5fa5a6]  C2Compiler::compile_method(ciEnv*, ciMethod*, int)+0x116
V  [libjvm.so+0x75d2d1]  CompileBroker::invoke_compiler_on_method(CompileTask*)+0x8d1
V  [libjvm.so+0x75ddb8]  CompileBroker::compiler_thread_loop()+0x408
V  [libjvm.so+0x105a934]  JavaThread::thread_main_inner()+0x1d4
V  [libjvm.so+0x105ac56]  JavaThread::run()+0x296
V  [libjvm.so+0xe25d82]  java_start(Thread*)+0xf2
C  [libpthread.so.0+0x8182]  start_thread+0xc2
...

hs_err_pid4155.log and replay_pid4155.log are attached.

This assert was introduced by JDK-8076188 and jdk9-b66 crashes with assert after that. jdk9-b65 works fine.
Comments
JDK-8076188 introduced code that eliminates an arraycopy if the destination is non escaping. The newly added LoadNode::find_previous_arraycopy() assumes that a clonebasic arraycopy that overwrites a newly allocated array always sets the corresponding InitializeNode to "complete", i.e., takes care of zeroing the array. However, this is only the case if ReduceBulkZeroing is enabled.
10-05-2016

ILW = Crash in debug mode, only if ReduceBulkZeroing is disabled, no workaround = MLH = P4
10-05-2016