Skip to content

Commit

Permalink
Merge pull request erlang#9417 from jhogberg/john/erts/suppress-gcc-w…
Browse files Browse the repository at this point in the history
…arnings/erlangGH-9413/OTP-19488

erts: Suppress various NULL-pointer warnings
  • Loading branch information
jhogberg authored Feb 19, 2025
2 parents be3ca1a + 8d8fa19 commit 19391bb
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
11 changes: 9 additions & 2 deletions erts/emulator/beam/dist.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);

Expand Down
12 changes: 11 additions & 1 deletion erts/emulator/beam/io.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
19 changes: 19 additions & 0 deletions erts/emulator/beam/sys.h
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,25 @@ typedef ERTS_SYS_FD_TYPE ErtsSysFdType;
# define ERTS_UNLIKELY(BOOL) (BOOL)
#endif

#if (ERTS_AT_LEAST_GCC_VSN__(5, 1, 0) || __has_builtin(__builtin_unreachable))
# define ERTS_UNREACHABLE __builtin_unreachable()
#elif defined(_MSC_VER)
# define ERTS_UNREACHABLE __assume(0)
#else
/* Unsupported compiler, just ignore it. */
# 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 : \
(void)ERTS_UNREACHABLE)
#else
# define ERTS_ASSUME(Expr) ASSERT((Expr))
#endif

/* AIX doesn't like this and claims section conflicts */
#if ERTS_AT_LEAST_GCC_VSN__(2, 96, 0) && !defined(_AIX)
#if (defined(__APPLE__) && defined(__MACH__)) || defined(__DARWIN__)
Expand Down

0 comments on commit 19391bb

Please sign in to comment.