| JDK 18 |
|---|
| 18 b24Fixed |
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
Building HotSpot with LLVM 13 fails due to SEGV at FrameMap::java_calling_convention(GrowableArray<BasicType> const*, bool). See attached log.
The root cause is the following code in LIR_OprDesc:
// Conversion
intptr_t value() const { return (intptr_t) this; }
This pattern is a source of undefined behavior in C++. This is similar to the issue with markOop/markOopDesc that was fixed in JDK-8229258.
In this case, the undefined behavior happens with:
bool check_value_mask(intptr_t mask, intptr_t masked_value) const {
return (value() & mask) == masked_value;
}
Compiler can make various optimizations if it believes "this" pointer is aligned. The LLVM optimization that tripped this is https://reviews.llvm.org/rG16d03818412415c56efcd482d18c0cbdf712524c , which is a roll-forward of https://reviews.llvm.org/D99790.
Properly fixing this requires wide refactoring of the use cases of LIR_OprDesc.
Colleagues James Y Knight and [~rasbold] have contributed a workaround patch with some hacks to reduce the patch size. I will publish this partial fix to collect initial feedback, and see if we could proceed with the patch, or if there are volunteers to pick up this work.
|