https://git.alpinelinux.org/aports/tree/community/openjdk17/FixNullPtrCast.patch https://github.com/openjdk/jdk17u/pull/347 See also: https://www.openwall.com/lists/musl/2013/01/09/1 https://git.musl-libc.org/cgit/musl/tree/include/unistd.h#n20 Subject: Fix cast errors with latest GCC (11.2) Upstream: No Author: Simon Frankenberger This patch fixes multiple casting errors reported by GCC 11.2 --- old/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ new/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -205,7 +205,7 @@ // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway, // because it must be the previous value. - res = load_reference_barrier(decorators, res, reinterpret_cast(NULL)); + res = load_reference_barrier(decorators, res, static_cast(NULL)); satb_enqueue(res); return res; } @@ -216,7 +216,7 @@ oop previous = RawAccess<>::oop_atomic_xchg(addr, new_value); // Note: We don't need a keep-alive-barrier here. We already enqueue any loaded reference for SATB anyway, // because it must be the previous value. - previous = load_reference_barrier(decorators, previous, reinterpret_cast(NULL)); + previous = load_reference_barrier(decorators, previous, static_cast(NULL)); satb_enqueue(previous); return previous; } --- old/src/hotspot/share/oops/access.hpp +++ new/src/hotspot/share/oops/access.hpp @@ -294,8 +294,8 @@ static inline void arraycopy(arrayOop src_obj, size_t src_offset_in_bytes, arrayOop dst_obj, size_t dst_offset_in_bytes, size_t length) { - AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast(NULL), - dst_obj, dst_offset_in_bytes, reinterpret_cast(NULL), + AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast(NULL), + dst_obj, dst_offset_in_bytes, static_cast(NULL), length); } @@ -303,7 +303,7 @@ static inline void arraycopy_to_native(arrayOop src_obj, size_t src_offset_in_bytes, T* dst, size_t length) { - AccessT::arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast(NULL), + AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast(NULL), NULL, 0, dst, length); } @@ -313,15 +313,15 @@ arrayOop dst_obj, size_t dst_offset_in_bytes, size_t length) { AccessT::arraycopy(NULL, 0, src, - dst_obj, dst_offset_in_bytes, reinterpret_cast(NULL), + dst_obj, dst_offset_in_bytes, static_cast(NULL), length); } static inline bool oop_arraycopy(arrayOop src_obj, size_t src_offset_in_bytes, arrayOop dst_obj, size_t dst_offset_in_bytes, size_t length) { - return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, reinterpret_cast(NULL), - dst_obj, dst_offset_in_bytes, reinterpret_cast(NULL), + return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, static_cast(NULL), + dst_obj, dst_offset_in_bytes, static_cast(NULL), length); } --- old/src/hotspot/cpu/x86/interp_masm_x86.cpp +++ new/src/hotspot/cpu/x86/interp_masm_x86.cpp @@ -1122,7 +1122,7 @@ bind(loop); // check if current entry is used - cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), (int32_t) NULL); + cmpptr(Address(rmon, BasicObjectLock::obj_offset_in_bytes()), 0); jcc(Assembler::notEqual, exception); addptr(rmon, entry_size); // otherwise advance to next entry --- old/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp +++ new/src/hotspot/cpu/x86/interpreterRT_x86_64.cpp @@ -443,10 +443,10 @@ _from -= Interpreter::stackElementSize; if (_num_int_args < Argument::n_int_register_parameters_c-1) { - *_int_args++ = (*from_addr == 0) ? NULL : (intptr_t)from_addr; + *_int_args++ = (*from_addr == 0) ? (intptr_t) 0 : (intptr_t) from_addr; _num_int_args++; } else { - *_to++ = (*from_addr == 0) ? NULL : (intptr_t) from_addr; + *_to++ = (*from_addr == 0) ? (intptr_t) 0 : (intptr_t) from_addr; } } --- old/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp +++ new/src/hotspot/cpu/aarch64/interpreterRT_aarch64.cpp @@ -267,7 +267,7 @@ virtual void pass_object() { intptr_t* addr = single_slot_addr(); - intptr_t value = *addr == 0 ? NULL : (intptr_t)addr; + intptr_t value = *addr == 0 ? (intptr_t) 0 : (intptr_t)addr; if (pass_gpr(value) < 0) { pass_stack<>(value); }