blob: e3c7a7cd2bfb387bb4357620a468de73544eab2b [file] [log] [blame]
From e8ec0a0f3a353a8167687a8fdb26773e45927aac Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 24 Apr 2022 09:49:12 -0700
Subject: [PATCH] Use explicit typecast to enum rrdset_flags
specifications say
An enumerator can be promoted to an integer value. However,
converting an integer to an enumerator requires an explicit
cast, and the results are not defined.
Therefore The bitwise OR operation you are performing results
in an int, which you then attempt to assign to a variable of
type rrdset_flags without a cast.
Fixes
| ml/Host.cc:167:9: error: assigning to 'RRDSET_FLAGS' (aka 'rrdset_flags') from incompatible type 'int'
| rrdset_flag_set(RS, RRDSET_FLAG_ANOMALY_DETECTION);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Upstream-Status: Submitted [https://github.com/netdata/netdata/pull/12750]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
database/rrd.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/database/rrd.h
+++ b/database/rrd.h
@@ -489,8 +489,8 @@ typedef enum rrdset_flags {
#define rrdset_flag_clear(st, flag) __atomic_and_fetch(&((st)->flags), ~flag, __ATOMIC_SEQ_CST)
#else
#define rrdset_flag_check(st, flag) ((st)->flags & (flag))
-#define rrdset_flag_set(st, flag) (st)->flags |= (flag)
-#define rrdset_flag_clear(st, flag) (st)->flags &= ~(flag)
+#define rrdset_flag_set(st, flag) (st)->flags = (RRDSET_FLAGS)((st)->flags | flag)
+#define rrdset_flag_clear(st, flag) (st)->flags = (RRDSET_FLAGS)((st)->flags & ~(flag))
#endif
#define rrdset_flag_check_noatomic(st, flag) ((st)->flags & (flag))