Patrick Williams | 03907ee | 2022-05-01 06:28:52 -0500 | [diff] [blame] | 1 | From e8ec0a0f3a353a8167687a8fdb26773e45927aac Mon Sep 17 00:00:00 2001 |
| 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Sun, 24 Apr 2022 09:49:12 -0700 |
| 4 | Subject: [PATCH] Use explicit typecast to enum rrdset_flags |
| 5 | |
| 6 | specifications say |
| 7 | An enumerator can be promoted to an integer value. However, |
| 8 | converting an integer to an enumerator requires an explicit |
| 9 | cast, and the results are not defined. |
| 10 | |
| 11 | Therefore The bitwise OR operation you are performing results |
| 12 | in an int, which you then attempt to assign to a variable of |
| 13 | type rrdset_flags without a cast. |
| 14 | |
| 15 | Fixes |
| 16 | | ml/Host.cc:167:9: error: assigning to 'RRDSET_FLAGS' (aka 'rrdset_flags') from incompatible type 'int' |
| 17 | | rrdset_flag_set(RS, RRDSET_FLAG_ANOMALY_DETECTION); |
| 18 | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 19 | |
| 20 | Upstream-Status: Submitted [https://github.com/netdata/netdata/pull/12750] |
| 21 | |
| 22 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 23 | --- |
| 24 | database/rrd.h | 4 ++-- |
| 25 | 1 file changed, 2 insertions(+), 2 deletions(-) |
| 26 | |
| 27 | --- a/database/rrd.h |
| 28 | +++ b/database/rrd.h |
| 29 | @@ -489,8 +489,8 @@ typedef enum rrdset_flags { |
| 30 | #define rrdset_flag_clear(st, flag) __atomic_and_fetch(&((st)->flags), ~flag, __ATOMIC_SEQ_CST) |
| 31 | #else |
| 32 | #define rrdset_flag_check(st, flag) ((st)->flags & (flag)) |
| 33 | -#define rrdset_flag_set(st, flag) (st)->flags |= (flag) |
| 34 | -#define rrdset_flag_clear(st, flag) (st)->flags &= ~(flag) |
| 35 | +#define rrdset_flag_set(st, flag) (st)->flags = (RRDSET_FLAGS)((st)->flags | flag) |
| 36 | +#define rrdset_flag_clear(st, flag) (st)->flags = (RRDSET_FLAGS)((st)->flags & ~(flag)) |
| 37 | #endif |
| 38 | #define rrdset_flag_check_noatomic(st, flag) ((st)->flags & (flag)) |
| 39 | |