* [PATCH] mac80211: Fix clang warning about constant operand in logical operation
@ 2017-04-06 18:56 Matthias Kaehlcke
[not found] ` <20170406185633.91065-1-mka-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-04-10 14:12 ` David Laight
0 siblings, 2 replies; 8+ messages in thread
From: Matthias Kaehlcke @ 2017-04-06 18:56 UTC (permalink / raw)
To: Johannes Berg, David S . Miller
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA, Grant Grundler, Michael Davidson,
Greg Hackmann, Matthias Kaehlcke
Clang raises a warning about the expression 'strlen(CONFIG_XXX)' being
used in a logical operation. Clangs' builtin strlen function resolves the
expression to a constant at compile time, which causes clang to generate
a 'constant-logical-operand' warning.
Split the if statement in two to avoid using the const expression in a
logical operation.
Signed-off-by: Matthias Kaehlcke <mka-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
---
net/mac80211/rate.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
index 206698bc93f4..68ff202d6380 100644
--- a/net/mac80211/rate.c
+++ b/net/mac80211/rate.c
@@ -173,9 +173,14 @@ ieee80211_rate_control_ops_get(const char *name)
/* try default if specific alg requested but not found */
ops = ieee80211_try_rate_control_ops_get(ieee80211_default_rc_algo);
+ if (ops)
+ goto unlock;
+
/* try built-in one if specific alg requested but not found */
- if (!ops && strlen(CONFIG_MAC80211_RC_DEFAULT))
+ if (strlen(CONFIG_MAC80211_RC_DEFAULT))
ops = ieee80211_try_rate_control_ops_get(CONFIG_MAC80211_RC_DEFAULT);
+
+unlock:
kernel_param_unlock(THIS_MODULE);
return ops;
--
2.12.2.715.g7642488e1d-goog
^ permalink raw reply related [flat|nested] 8+ messages in thread
[parent not found: <20170406185633.91065-1-mka-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>]
* Re: [PATCH] mac80211: Fix clang warning about constant operand in logical operation
[not found] ` <20170406185633.91065-1-mka-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
@ 2017-04-06 19:11 ` Johannes Berg
2017-04-06 19:24 ` Matthias Kaehlcke
0 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2017-04-06 19:11 UTC (permalink / raw)
To: Matthias Kaehlcke, David S . Miller
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA, Grant Grundler, Michael Davidson,
Greg Hackmann
On Thu, 2017-04-06 at 11:56 -0700, Matthias Kaehlcke wrote:
> Clang raises a warning about the expression 'strlen(CONFIG_XXX)'
> being
> used in a logical operation. Clangs' builtin strlen function resolves
> the
> expression to a constant at compile time, which causes clang to
> generate
> a 'constant-logical-operand' warning.
>
> Split the if statement in two to avoid using the const expression in
> a logical operation.
>
I don't really see all much point in doing this for the warning's
sake... hopefully it doesn't actually generate worse code, but I think
the code ends up looking worse and people will forever wonder what the
goto is really doing there.
johannes
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] mac80211: Fix clang warning about constant operand in logical operation
2017-04-06 19:11 ` Johannes Berg
@ 2017-04-06 19:24 ` Matthias Kaehlcke
[not found] ` <20170406192452.GE145051-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 8+ messages in thread
From: Matthias Kaehlcke @ 2017-04-06 19:24 UTC (permalink / raw)
To: Johannes Berg
Cc: David S . Miller, linux-kernel, linux-wireless, netdev,
Grant Grundler, Michael Davidson, Greg Hackmann
Hi Johannes,
thanks for your comments
El Thu, Apr 06, 2017 at 09:11:18PM +0200 Johannes Berg ha dit:
> On Thu, 2017-04-06 at 11:56 -0700, Matthias Kaehlcke wrote:
> > Clang raises a warning about the expression 'strlen(CONFIG_XXX)'
> > being
> > used in a logical operation. Clangs' builtin strlen function resolves
> > the
> > expression to a constant at compile time, which causes clang to
> > generate
> > a 'constant-logical-operand' warning.
> >
> > Split the if statement in two to avoid using the const expression in
> > a logical operation.
> >
> I don't really see all much point in doing this for the warning's
> sake... hopefully it doesn't actually generate worse code, but I think
> the code ends up looking worse and people will forever wonder what the
> goto is really doing there.
I agree that the code looks worse :( I hoped to find a fix using a
preprocessor condition but wasn't successful.
Some projects (like Chrome OS) build their kernel with all warnings
being treated as errors. Besides changing the 'offending' code the
alternatives are to disable the warning completely or to tell clang
not to use the builtin(s). IMO changing the code is the preferable
solution, especially since this is so far the only occurrence of the
warning that I have encountered.
I used goto instead of nested ifs since other functions in this file
use the same pattern. If nested ifs are preferred I can change that.
Cheers
Matthias
^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH] mac80211: Fix clang warning about constant operand in logical operation
2017-04-06 18:56 [PATCH] mac80211: Fix clang warning about constant operand in logical operation Matthias Kaehlcke
[not found] ` <20170406185633.91065-1-mka-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
@ 2017-04-10 14:12 ` David Laight
1 sibling, 0 replies; 8+ messages in thread
From: David Laight @ 2017-04-10 14:12 UTC (permalink / raw)
To: 'Matthias Kaehlcke', Johannes Berg, David S . Miller
Cc: linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org,
netdev@vger.kernel.org, Grant Grundler, Michael Davidson,
Greg Hackmann
From: Matthias Kaehlcke
> Sent: 06 April 2017 19:57
> Clang raises a warning about the expression 'strlen(CONFIG_XXX)' being
> used in a logical operation. Clangs' builtin strlen function resolves the
> expression to a constant at compile time, which causes clang to generate
> a 'constant-logical-operand' warning.
>
> Split the if statement in two to avoid using the const expression in a
> logical operation.
>
> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> ---
> net/mac80211/rate.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c
> index 206698bc93f4..68ff202d6380 100644
> --- a/net/mac80211/rate.c
> +++ b/net/mac80211/rate.c
> @@ -173,9 +173,14 @@ ieee80211_rate_control_ops_get(const char *name)
> /* try default if specific alg requested but not found */
> ops = ieee80211_try_rate_control_ops_get(ieee80211_default_rc_algo);
>
> + if (ops)
> + goto unlock;
> +
> /* try built-in one if specific alg requested but not found */
> - if (!ops && strlen(CONFIG_MAC80211_RC_DEFAULT))
> + if (strlen(CONFIG_MAC80211_RC_DEFAULT))
> ops = ieee80211_try_rate_control_ops_get(CONFIG_MAC80211_RC_DEFAULT);
> +
> +unlock:
Using the result of strlen() as a boolean should itself be a compilation error.
You could change to code to the equivalent:
if (!ops && CONFIG_MAC80211_RC_DEFAULT[0])
ops = ...
David
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-04-10 14:12 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-06 18:56 [PATCH] mac80211: Fix clang warning about constant operand in logical operation Matthias Kaehlcke
[not found] ` <20170406185633.91065-1-mka-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
2017-04-06 19:11 ` Johannes Berg
2017-04-06 19:24 ` Matthias Kaehlcke
[not found] ` <20170406192452.GE145051-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2017-04-06 21:12 ` Johannes Berg
2017-04-06 22:42 ` Matthias Kaehlcke
2017-04-06 22:51 ` Johannes Berg
2017-04-06 23:07 ` Matthias Kaehlcke
2017-04-10 14:12 ` David Laight
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).