File 0869-erts-Suppress-various-NULL-pointer-warnings.patch of Package erlang

From 8d8fa1907ecaa98776b3fd2141fbd8b4cf8078cf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Tue, 11 Feb 2025 09:40:57 +0100
Subject: [PATCH 2/2] erts: Suppress various NULL-pointer warnings

---
 erts/emulator/beam/dist.c | 11 +++++++++--
 erts/emulator/beam/io.c   | 12 +++++++++++-
 erts/emulator/beam/sys.h  |  2 ++
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c
index d30fe57980..cfa857e0df 100644
--- a/erts/emulator/beam/dist.c
+++ b/erts/emulator/beam/dist.c
@@ -3194,11 +3194,11 @@ void erts_schedule_dist_command(Port *prt, DistEntry *dist_entry)
 		& ERTS_PORT_SFLGS_DEAD) == 0);
 
         dep = (DistEntry*) erts_prtsd_get(prt, ERTS_PRTSD_DIST_ENTRY);
-        ASSERT(dep);
+        ERTS_ASSUME(dep);
 	id = prt->common.id;
     }
     else {
-	ASSERT(dist_entry);
+	ERTS_ASSUME(dist_entry);
 	ERTS_LC_ASSERT(erts_lc_rwmtx_is_rlocked(&dist_entry->rwmtx)
 			   || erts_lc_rwmtx_is_rwlocked(&dist_entry->rwmtx));
 	ASSERT(is_internal_port(dist_entry->cid));
@@ -3773,6 +3773,9 @@ dist_port_commandv(Port *prt, ErtsDistOutputBuf *obuf)
 #ifdef USE_VM_PROBES
     if (DTRACE_ENABLED(dist_outputv)) {
         DistEntry *dep = (DistEntry*) erts_prtsd_get(prt, ERTS_PRTSD_DIST_ENTRY);
+
+        ERTS_ASSUME(dep);
+
         DTRACE_CHARBUF(port_str, 64);
         DTRACE_CHARBUF(remote_str, 64);
 
@@ -3878,6 +3881,7 @@ erts_dist_command(Port *prt, int initial_reds)
 
     ERTS_LC_ASSERT(erts_lc_is_port_locked(prt));
 
+    ERTS_ASSUME(dep);
     erts_atomic_set_mb(&dep->dist_cmd_scheduled, 0);
 
     erts_de_rlock(dep);
@@ -4625,6 +4629,9 @@ erts_dist_port_not_busy(Port *prt)
 #ifdef USE_VM_PROBES
     if (DTRACE_ENABLED(dist_port_not_busy)) {
         DistEntry *dep = (DistEntry*) erts_prtsd_get(prt, ERTS_PRTSD_DIST_ENTRY);
+
+        ERTS_ASSUME(dep);
+
         DTRACE_CHARBUF(port_str, 64);
         DTRACE_CHARBUF(remote_str, 64);
 
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index 41c1b94ccb..186e592c31 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -3903,7 +3903,9 @@ erts_deliver_port_exit(Port *prt, Eterm from, Eterm reason, int send_closed,
 
    if (state & ERTS_PORT_SFLG_DISTRIBUTION) {
        DistEntry *dep = (DistEntry*) erts_prtsd_get(prt, ERTS_PRTSD_DIST_ENTRY);
-       ASSERT(dep);
+
+       ERTS_ASSUME(dep);
+
        erts_do_net_exits(dep, modified_reason);
        erts_deref_dist_entry(dep);
        erts_prtsd_set(prt, ERTS_PRTSD_DIST_ENTRY, NULL);
@@ -6345,7 +6347,11 @@ int driver_output_binary(ErlDrvPort ix, char* hbuf, ErlDrvSizeT hlen,
     if (state & ERTS_PORT_SFLG_DISTRIBUTION) {
         DistEntry* dep = (DistEntry*) erts_prtsd_get(prt, ERTS_PRTSD_DIST_ENTRY);
         Uint32 conn_id = (Uint32)(UWord) erts_prtsd_get(prt, ERTS_PRTSD_CONN_ID);
+
+        ERTS_ASSUME(dep);
+
         erts_atomic64_inc_nob(&dep->in);
+
 	return erts_net_message(prt,
 				dep,
                                 conn_id,
@@ -6390,7 +6396,11 @@ int driver_output2(ErlDrvPort ix, char* hbuf, ErlDrvSizeT hlen,
     if (state & ERTS_PORT_SFLG_DISTRIBUTION) {
         DistEntry *dep = (DistEntry*) erts_prtsd_get(prt, ERTS_PRTSD_DIST_ENTRY);
         Uint32 conn_id = (Uint32)(UWord) erts_prtsd_get(prt, ERTS_PRTSD_CONN_ID);
+
+        ERTS_ASSUME(dep);
+
         erts_atomic64_inc_nob(&dep->in);
+
 	if (len == 0)
 	    return erts_net_message(prt,
 				    dep,
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index b066f708d3..064c265f2e 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.h
@@ -186,6 +186,8 @@ typedef ERTS_SYS_FD_TYPE ErtsSysFdType;
 #  define ERTS_UNREACHABLE ((void)0)
 #endif
 
+/* Tells the compiler to assume that a certain fact always holds, suppressing
+ * bogus warnings and/or enabling better optimizations. */
 #if !defined(DEBUG)
 #  define ERTS_ASSUME(Expr) ((Expr) ?                                          \
                              (void)0 :                                         \
-- 
2.43.0

openSUSE Build Service is sponsored by