-
Bug
-
Resolution: Fixed
-
P3
-
8, 11, 16
-
b09
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8256137 | 11.0.11-oracle | Dukebot | P3 | Resolved | Fixed | b01 |
JDK-8256468 | 11.0.10 | Jie Fu | P3 | Resolved | Fixed | b03 |
JDK-8300537 | 8u371 | Daniel Skantz | P3 | Resolved | Fixed | b03 |
# Symptom
```
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (../jdk/src/hotspot/share/opto/type.cpp:3023), pid=25278, tid=40451
# assert(field != __null) failed: missing field
#
--------------- T H R E A D ---------------
Current thread (0x00007f8db7009820): JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=40451, stack(0x0000700009e5e000,0x0000700009f5e000)]
Current CompileTask:
C2: 213 8 b UnsafeAccessCompileTest::test (15 bytes)
Stack: [0x0000700009e5e000,0x0000700009f5e000], sp=0x0000700009f57c40, free space=999k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.dylib+0x110f0aa] VMError::report_and_die(int, char const*, char const*, __va_list_tag*, Thread*, unsigned char*, void*, void*, char const*, int, unsigned long)+0x7fa
V [libjvm.dylib+0x110f969] VMError::report_and_die(Thread*, void*, char const*, int, char const*, char const*, __va_list_tag*)+0x89
V [libjvm.dylib+0x549703] report_vm_error(char const*, int, char const*, char const*, ...)+0x283
V [libjvm.dylib+0x109db26] TypeOopPtr::TypeOopPtr(Type::TYPES, TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x556
V [libjvm.dylib+0x109f5bc] TypeInstPtr::TypeInstPtr(TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x9c
V [libjvm.dylib+0x109f6cb] TypeInstPtr::TypeInstPtr(TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x7b
V [libjvm.dylib+0x1096413] TypeInstPtr::make(TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x263
V [libjvm.dylib+0x10a1b63] TypeInstPtr::add_offset(long) const+0xb3
V [libjvm.dylib+0x1e788e] AddPNode::Value(PhaseGVN*) const+0x10e
V [libjvm.dylib+0xe0a13c] PhaseGVN::transform_no_reclaim(Node*)+0x12c
V [libjvm.dylib+0xe09ffd] PhaseGVN::transform(Node*)+0x1d
V [libjvm.dylib+0x79cb22] GraphKit::basic_plus_adr(Node*, Node*, Node*)+0xb2
V [libjvm.dylib+0xba7c19] GraphKit::basic_plus_adr(Node*, Node*)+0x29
V [libjvm.dylib+0xba3680] LibraryCallKit::make_unsafe_address(Node*&, Node*, unsigned long long, BasicType, bool)+0x480
V [libjvm.dylib+0xb8c332] LibraryCallKit::inline_unsafe_access(bool, BasicType, LibraryCallKit::AccessKind, bool)+0x5c2
V [libjvm.dylib+0xb8344e] LibraryCallKit::try_to_inline(int)+0x51e
V [libjvm.dylib+0xb82921] LibraryIntrinsic::generate(JVMState*)+0x161
V [libjvm.dylib+0x625c66] Parse::do_call()+0xb36
V [libjvm.dylib+0xdf488a] Parse::do_one_bytecode()+0x543a
V [libjvm.dylib+0xde112d] Parse::do_one_block()+0x4bd
V [libjvm.dylib+0xddfc13] Parse::do_all_blocks()+0x3d3
V [libjvm.dylib+0xddc636] Parse::Parse(JVMState*, ciMethod*, float)+0xe76
V [libjvm.dylib+0xde077f] Parse::Parse(JVMState*, ciMethod*, float)+0x2f
V [libjvm.dylib+0x3d20f5] ParseGenerator::generate(JVMState*)+0xf5
V [libjvm.dylib+0x625c66] Parse::do_call()+0xb36
V [libjvm.dylib+0xdf488a] Parse::do_one_bytecode()+0x543a
V [libjvm.dylib+0xde112d] Parse::do_one_block()+0x4bd
V [libjvm.dylib+0xddfc13] Parse::do_all_blocks()+0x3d3
V [libjvm.dylib+0xddc636] Parse::Parse(JVMState*, ciMethod*, float)+0xe76
V [libjvm.dylib+0xde077f] Parse::Parse(JVMState*, ciMethod*, float)+0x2f
V [libjvm.dylib+0x3d20f5] ParseGenerator::generate(JVMState*)+0xf5
V [libjvm.dylib+0x4eaef9] Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, DirectiveSet*)+0xbe9
V [libjvm.dylib+0x4ee6ff] Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, DirectiveSet*)+0x9f
V [libjvm.dylib+0x3cff65] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x185
V [libjvm.dylib+0x5080bc] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x98c
V [libjvm.dylib+0x507581] CompileBroker::compiler_thread_loop()+0x381
V [libjvm.dylib+0x106e2e8] compiler_thread_entry(JavaThread*, Thread*)+0x58
V [libjvm.dylib+0x106ecd7] JavaThread::thread_main_inner()+0x147
V [libjvm.dylib+0x106e837] JavaThread::run()+0x1d7
V [libjvm.dylib+0x106a42e] Thread::call_run()+0x14e
V [libjvm.dylib+0xda7b2f] thread_native_entry(Thread*)+0x13f
C [libsystem_pthread.dylib+0x5d36] _pthread_start+0x7d
C [libsystem_pthread.dylib+0x258f] thread_start+0xf
```
# Reproduce
Run the following program with:
java -XX:-TieredCompilation -Xbatch -Xcomp -XX:CompileOnly=UnsafeAccessCompileTest::test UnsafeAccessCompileTest
```
import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class UnsafeAccessCompileTest {
private static Unsafe initUnsafe() {
try {
// Fast path when we are trusted.
return Unsafe.getUnsafe();
} catch (SecurityException se) {
// Slow path when we are not trusted.
try {
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
return (Unsafe) theUnsafe.get(Unsafe.class);
} catch (Exception e) {
throw new RuntimeException("exception while trying to get Unsafe", e);
}
}
}
private static final Unsafe UNSAFE = initUnsafe();
private static short onHeapMemory = (short)0x0102;
private static final Object onHeapMemoryBase;
private static final long onHeapMemoryOffset;
static {
try {
Field staticField = UnsafeAccessCompileTest.class.getDeclaredField("onHeapMemory");
onHeapMemoryBase = UNSAFE.staticFieldBase(staticField);
onHeapMemoryOffset = UNSAFE.staticFieldOffset(staticField);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static byte test() {
return UNSAFE.getByte(onHeapMemoryBase, onHeapMemoryOffset + 1);
}
public static void main(String[] args) {
System.out.println(test());
}
}
```
```
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (../jdk/src/hotspot/share/opto/type.cpp:3023), pid=25278, tid=40451
# assert(field != __null) failed: missing field
#
--------------- T H R E A D ---------------
Current thread (0x00007f8db7009820): JavaThread "C2 CompilerThread0" daemon [_thread_in_native, id=40451, stack(0x0000700009e5e000,0x0000700009f5e000)]
Current CompileTask:
C2: 213 8 b UnsafeAccessCompileTest::test (15 bytes)
Stack: [0x0000700009e5e000,0x0000700009f5e000], sp=0x0000700009f57c40, free space=999k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.dylib+0x110f0aa] VMError::report_and_die(int, char const*, char const*, __va_list_tag*, Thread*, unsigned char*, void*, void*, char const*, int, unsigned long)+0x7fa
V [libjvm.dylib+0x110f969] VMError::report_and_die(Thread*, void*, char const*, int, char const*, char const*, __va_list_tag*)+0x89
V [libjvm.dylib+0x549703] report_vm_error(char const*, int, char const*, char const*, ...)+0x283
V [libjvm.dylib+0x109db26] TypeOopPtr::TypeOopPtr(Type::TYPES, TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x556
V [libjvm.dylib+0x109f5bc] TypeInstPtr::TypeInstPtr(TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x9c
V [libjvm.dylib+0x109f6cb] TypeInstPtr::TypeInstPtr(TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x7b
V [libjvm.dylib+0x1096413] TypeInstPtr::make(TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)+0x263
V [libjvm.dylib+0x10a1b63] TypeInstPtr::add_offset(long) const+0xb3
V [libjvm.dylib+0x1e788e] AddPNode::Value(PhaseGVN*) const+0x10e
V [libjvm.dylib+0xe0a13c] PhaseGVN::transform_no_reclaim(Node*)+0x12c
V [libjvm.dylib+0xe09ffd] PhaseGVN::transform(Node*)+0x1d
V [libjvm.dylib+0x79cb22] GraphKit::basic_plus_adr(Node*, Node*, Node*)+0xb2
V [libjvm.dylib+0xba7c19] GraphKit::basic_plus_adr(Node*, Node*)+0x29
V [libjvm.dylib+0xba3680] LibraryCallKit::make_unsafe_address(Node*&, Node*, unsigned long long, BasicType, bool)+0x480
V [libjvm.dylib+0xb8c332] LibraryCallKit::inline_unsafe_access(bool, BasicType, LibraryCallKit::AccessKind, bool)+0x5c2
V [libjvm.dylib+0xb8344e] LibraryCallKit::try_to_inline(int)+0x51e
V [libjvm.dylib+0xb82921] LibraryIntrinsic::generate(JVMState*)+0x161
V [libjvm.dylib+0x625c66] Parse::do_call()+0xb36
V [libjvm.dylib+0xdf488a] Parse::do_one_bytecode()+0x543a
V [libjvm.dylib+0xde112d] Parse::do_one_block()+0x4bd
V [libjvm.dylib+0xddfc13] Parse::do_all_blocks()+0x3d3
V [libjvm.dylib+0xddc636] Parse::Parse(JVMState*, ciMethod*, float)+0xe76
V [libjvm.dylib+0xde077f] Parse::Parse(JVMState*, ciMethod*, float)+0x2f
V [libjvm.dylib+0x3d20f5] ParseGenerator::generate(JVMState*)+0xf5
V [libjvm.dylib+0x625c66] Parse::do_call()+0xb36
V [libjvm.dylib+0xdf488a] Parse::do_one_bytecode()+0x543a
V [libjvm.dylib+0xde112d] Parse::do_one_block()+0x4bd
V [libjvm.dylib+0xddfc13] Parse::do_all_blocks()+0x3d3
V [libjvm.dylib+0xddc636] Parse::Parse(JVMState*, ciMethod*, float)+0xe76
V [libjvm.dylib+0xde077f] Parse::Parse(JVMState*, ciMethod*, float)+0x2f
V [libjvm.dylib+0x3d20f5] ParseGenerator::generate(JVMState*)+0xf5
V [libjvm.dylib+0x4eaef9] Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, DirectiveSet*)+0xbe9
V [libjvm.dylib+0x4ee6ff] Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, DirectiveSet*)+0x9f
V [libjvm.dylib+0x3cff65] C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)+0x185
V [libjvm.dylib+0x5080bc] CompileBroker::invoke_compiler_on_method(CompileTask*)+0x98c
V [libjvm.dylib+0x507581] CompileBroker::compiler_thread_loop()+0x381
V [libjvm.dylib+0x106e2e8] compiler_thread_entry(JavaThread*, Thread*)+0x58
V [libjvm.dylib+0x106ecd7] JavaThread::thread_main_inner()+0x147
V [libjvm.dylib+0x106e837] JavaThread::run()+0x1d7
V [libjvm.dylib+0x106a42e] Thread::call_run()+0x14e
V [libjvm.dylib+0xda7b2f] thread_native_entry(Thread*)+0x13f
C [libsystem_pthread.dylib+0x5d36] _pthread_start+0x7d
C [libsystem_pthread.dylib+0x258f] thread_start+0xf
```
# Reproduce
Run the following program with:
java -XX:-TieredCompilation -Xbatch -Xcomp -XX:CompileOnly=UnsafeAccessCompileTest::test UnsafeAccessCompileTest
```
import java.lang.reflect.Field;
import sun.misc.Unsafe;
public class UnsafeAccessCompileTest {
private static Unsafe initUnsafe() {
try {
// Fast path when we are trusted.
return Unsafe.getUnsafe();
} catch (SecurityException se) {
// Slow path when we are not trusted.
try {
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
return (Unsafe) theUnsafe.get(Unsafe.class);
} catch (Exception e) {
throw new RuntimeException("exception while trying to get Unsafe", e);
}
}
}
private static final Unsafe UNSAFE = initUnsafe();
private static short onHeapMemory = (short)0x0102;
private static final Object onHeapMemoryBase;
private static final long onHeapMemoryOffset;
static {
try {
Field staticField = UnsafeAccessCompileTest.class.getDeclaredField("onHeapMemory");
onHeapMemoryBase = UNSAFE.staticFieldBase(staticField);
onHeapMemoryOffset = UNSAFE.staticFieldOffset(staticField);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static byte test() {
return UNSAFE.getByte(onHeapMemoryBase, onHeapMemoryOffset + 1);
}
public static void main(String[] args) {
System.out.println(test());
}
}
```
- backported by
-
JDK-8256137 C2 crashes with assert(field != __null) failed: missing field
- Resolved
-
JDK-8256468 C2 crashes with assert(field != __null) failed: missing field
- Resolved
-
JDK-8300537 C2 crashes with assert(field != __null) failed: missing field
- Resolved
- links to
-
Review(master) openjdk/jdk8u-dev/552