summaryrefslogtreecommitdiff
path: root/dev-java/openjdk/files/openjdk-17.0.3-fix-nullptr-cast.patch
blob: 11f159680d8be72cd211a5b158dd550cd8542957 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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 <simon-alpine@fraho.eu>

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<T*>(NULL));
+  res = load_reference_barrier(decorators, res, static_cast<T*>(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<T>(decorators, previous, reinterpret_cast<T*>(NULL));
+  previous = load_reference_barrier<T>(decorators, previous, static_cast<T*>(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<const T*>(NULL),
-                       dst_obj, dst_offset_in_bytes, reinterpret_cast<T*>(NULL),
+    AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast<const T*>(NULL),
+                       dst_obj, dst_offset_in_bytes, static_cast<T*>(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<const T*>(NULL),
+    AccessT::arraycopy(src_obj, src_offset_in_bytes, static_cast<const T*>(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<T*>(NULL),
+                       dst_obj, dst_offset_in_bytes, static_cast<T*>(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<const HeapWord*>(NULL),
-                                  dst_obj, dst_offset_in_bytes, reinterpret_cast<HeapWord*>(NULL),
+    return AccessT::oop_arraycopy(src_obj, src_offset_in_bytes, static_cast<const HeapWord*>(NULL),
+                                  dst_obj, dst_offset_in_bytes, static_cast<HeapWord*>(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);
     }