From 6da709aa5711ee57761028c143fc00b65026c15d Mon Sep 17 00:00:00 2001 From: Jonathan Rajotte Date: Tue, 23 Jul 2019 15:23:02 -0400 Subject: [PATCH] `ctf` plugin: Use is_log_level_set to infer ctf_event_class log_level validity Seen on clang-3.9, 4.0 and clang-1001.0.46.4. Comparison of constant -1 with expression of type 'enum *****' is always false [-Wtautological-constant-out-of-range-compare] Note that the enum underlying type is implementation defined and left to the choice of the compiler by the standard [1] (6.7.2.2 4). Most compiler default to unsigned int. The use of -1 is not a problem per see since wrap around of unsigned int behaviour is not undefined. Using -1 is the equivalent of assigning UINT_MAX here. This warning was removed for later clang for these specific cases since the effect of always being false is erroneous. Signed-off-by: Jonathan Rajotte Change-Id: I6ce97c2481f36573d1a221b59e2459f1fe35ded9 Reviewed-on: https://review.lttng.org/c/babeltrace/+/1761 CI-Build: Philippe Proulx Tested-by: jenkins Reviewed-by: Philippe Proulx --- src/plugins/ctf/common/metadata/ctf-meta-translate.c | 2 +- src/plugins/ctf/common/metadata/ctf-meta.h | 12 +++++++++++- .../ctf/common/metadata/visitor-generate-ir.c | 6 ++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/plugins/ctf/common/metadata/ctf-meta-translate.c b/src/plugins/ctf/common/metadata/ctf-meta-translate.c index c79e0d94..7d0d966a 100644 --- a/src/plugins/ctf/common/metadata/ctf-meta-translate.c +++ b/src/plugins/ctf/common/metadata/ctf-meta-translate.c @@ -543,7 +543,7 @@ void ctf_event_class_to_ir(struct ctx *ctx) BT_ASSERT(ret == 0); } - if (ctx->ec->log_level != -1) { + if (ctx->ec->is_log_level_set) { bt_event_class_set_log_level(ir_ec, ctx->ec->log_level); } diff --git a/src/plugins/ctf/common/metadata/ctf-meta.h b/src/plugins/ctf/common/metadata/ctf-meta.h index 68ad988e..c5874ad1 100644 --- a/src/plugins/ctf/common/metadata/ctf-meta.h +++ b/src/plugins/ctf/common/metadata/ctf-meta.h @@ -221,6 +221,7 @@ struct ctf_event_class { GString *emf_uri; bt_event_class_log_level log_level; bool is_translated; + bool is_log_level_set; /* Owned by this */ struct ctf_field_class *spec_context_fc; @@ -1485,10 +1486,19 @@ struct ctf_event_class *ctf_event_class_create(void) BT_ASSERT(ec->name); ec->emf_uri = g_string_new(NULL); BT_ASSERT(ec->emf_uri); - ec->log_level = -1; + ec->is_log_level_set = false; return ec; } +static inline +void ctf_event_class_set_log_level(struct ctf_event_class *ec, + enum bt_event_class_log_level log_level) +{ + BT_ASSERT(ec); + ec->log_level = log_level; + ec->is_log_level_set = true; +} + static inline void ctf_event_class_destroy(struct ctf_event_class *ec) { diff --git a/src/plugins/ctf/common/metadata/visitor-generate-ir.c b/src/plugins/ctf/common/metadata/visitor-generate-ir.c index b7831a86..9b0f16e6 100644 --- a/src/plugins/ctf/common/metadata/visitor-generate-ir.c +++ b/src/plugins/ctf/common/metadata/visitor-generate-ir.c @@ -3173,6 +3173,7 @@ int visit_event_decl_entry(struct ctx *ctx, struct ctf_node *node, _SET(set, _EVENT_FIELDS_SET); } else if (strcmp(left, "loglevel") == 0) { uint64_t loglevel_value; + bool is_log_level_known = true; bt_event_class_log_level log_level = -1; if (_IS_SET(set, _EVENT_LOG_LEVEL_SET)) { @@ -3238,12 +3239,13 @@ int visit_event_decl_entry(struct ctx *ctx, struct ctf_node *node, log_level = BT_EVENT_CLASS_LOG_LEVEL_DEBUG; break; default: + is_log_level_known = false; _BT_COMP_LOGW_NODE(node, "Not setting event class's log level because its value is unknown: " "log-level=%" PRIu64, loglevel_value); } - if (log_level != -1) { - event_class->log_level = log_level; + if (is_log_level_known) { + ctf_event_class_set_log_level(event_class, log_level); } _SET(set, _EVENT_LOG_LEVEL_SET); -- 2.34.1