Messages in this thread Patch in this message | | | From | Dávid Bolvanský <> | Date | Thu, 26 Sep 2019 01:41:12 +0200 | Subject | Re: [PATCH] tracing: Fix clang -Wint-in-bool-context warnings in IF_ASSIGN macro |
| |
GCC C frontend does not warn, GCC C++ FE does. https://godbolt.org/z/_sczyM
So I (we?) think there is something weird in gcc frontends.
>> I can't think of a case that this warning is a bug (maybe David can explain more),
In this case or generally? General bug example:
if (state == A || B)
(should be if (state == A || state == B))
Since this is just one occurrence and I recommend to just land this small fix.
st 25. 9. 2019 o 19:41 Nick Desaulniers <ndesaulniers@google.com> napísal(a): > > On Wed, Sep 25, 2019 at 10:29 AM Nathan Chancellor > <natechancellor@gmail.com> wrote: > > > > After r372664 in clang, the IF_ASSIGN macro causes a couple hundred > > warnings along the lines of: > > > > kernel/trace/trace_output.c:1331:2: warning: converting the enum > > constant to a boolean [-Wint-in-bool-context] > > kernel/trace/trace.h:409:3: note: expanded from macro > > 'trace_assign_type' > > IF_ASSIGN(var, ent, struct ftrace_graph_ret_entry, > > ^ > > kernel/trace/trace.h:371:14: note: expanded from macro 'IF_ASSIGN' > > WARN_ON(id && (entry)->type != id); \ > > ^ > > 264 warnings generated. > > > > Add the implicit '!= 0' to the WARN_ON statement to fix the warnings. > > > > Link: https://github.com/llvm/llvm-project/commit/28b38c277a2941e9e891b2db30652cfd962f070b > > Link: https://github.com/ClangBuiltLinux/linux/issues/686 > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > > I can't think of a case that this warning is a bug (maybe David can > explain more), but seems like a small fix that can stop a big spew of > warnings, and IIUC this is the lone instance we see in the kernel. In > that case, I prefer a tiny change to outright disabling the warning in > case it does find interesting cases later. > Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > > > --- > > kernel/trace/trace.h | 10 +++++----- > > 1 file changed, 5 insertions(+), 5 deletions(-) > > > > diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h > > index 26b0a08f3c7d..f801d154ff6a 100644 > > --- a/kernel/trace/trace.h > > +++ b/kernel/trace/trace.h > > @@ -365,11 +365,11 @@ static inline struct trace_array *top_trace_array(void) > > __builtin_types_compatible_p(typeof(var), type *) > > > > #undef IF_ASSIGN > > -#define IF_ASSIGN(var, entry, etype, id) \ > > - if (FTRACE_CMP_TYPE(var, etype)) { \ > > - var = (typeof(var))(entry); \ > > - WARN_ON(id && (entry)->type != id); \ > > - break; \ > > +#define IF_ASSIGN(var, entry, etype, id) \ > > + if (FTRACE_CMP_TYPE(var, etype)) { \ > > + var = (typeof(var))(entry); \ > > + WARN_ON(id != 0 && (entry)->type != id); \ > > + break; \ > > } > > > > /* Will cause compile errors if type is not found. */ > > -- > > 2.23.0 > > > > > -- > Thanks, > ~Nick Desaulniers
| |