| 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)) |
| |