All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <natechancellor@gmail.com>
To: Matthias Kaehlcke <mka@chromium.org>
Cc: "David S . Miller" <davem@davemloft.net>,
	Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>,
	Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>,
	Alexander Duyck <alexander.h.duyck@redhat.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	Douglas Anderson <dianders@chromium.org>,
	Nick Desaulniers <ndesaulniers@google.com>,
	Nathan Huckleberry <nhuck@google.com>,
	clang-built-linux@googlegroups.com
Subject: Re: [PATCH] net/ipv4: fib_trie: Avoid cryptic ternary expressions
Date: Tue, 18 Jun 2019 16:04:20 -0700	[thread overview]
Message-ID: <20190618230420.GA84107@archlinux-epyc> (raw)
In-Reply-To: <20190618211440.54179-1-mka@chromium.org>

On Tue, Jun 18, 2019 at 02:14:40PM -0700, Matthias Kaehlcke wrote:
> empty_child_inc/dec() use the ternary operator for conditional
> operations. The conditions involve the post/pre in/decrement
> operator and the operation is only performed when the condition
> is *not* true. This is hard to parse for humans, use a regular
> 'if' construct instead and perform the in/decrement separately.
> 
> This also fixes two warnings that are emitted about the value
> of the ternary expression being unused, when building the kernel
> with clang + "kbuild: Remove unnecessary -Wno-unused-value"
> (https://lore.kernel.org/patchwork/patch/1089869/):
> 
> CC      net/ipv4/fib_trie.o
> net/ipv4/fib_trie.c:351:2: error: expression result unused [-Werror,-Wunused-value]
>         ++tn_info(n)->empty_children ? : ++tn_info(n)->full_children;
> 

As an FYI, this is also being fixed in clang:

https://bugs.llvm.org/show_bug.cgi?id=42239

https://reviews.llvm.org/D63369

> Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
> ---
> I have no good understanding of the fib_trie code, but the
> disentangled code looks wrong, and it should be equivalent to the
> cryptic version, unless I messed it up. In empty_child_inc()
> 'full_children' is only incremented when 'empty_children' is -1. I
> suspect a bug in the cryptic code, but am surprised why it hasn't
> blown up yet. Or is it intended behavior that is just
> super-counterintuitive?
> 
> For now I'm leaving it at disentangling the cryptic expressions,
> if there is a bug we can discuss what action to take.
> ---
>  net/ipv4/fib_trie.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
> index 868c74771fa9..cf7788e336b7 100644
> --- a/net/ipv4/fib_trie.c
> +++ b/net/ipv4/fib_trie.c
> @@ -338,12 +338,18 @@ static struct tnode *tnode_alloc(int bits)
>  
>  static inline void empty_child_inc(struct key_vector *n)
>  {
> -	++tn_info(n)->empty_children ? : ++tn_info(n)->full_children;
> +	tn_info(n)->empty_children++;
> +
> +	if (!tn_info(n)->empty_children)
> +		tn_info(n)->full_children++;
>  }
>  
>  static inline void empty_child_dec(struct key_vector *n)
>  {
> -	tn_info(n)->empty_children-- ? : tn_info(n)->full_children--;
> +	if (!tn_info(n)->empty_children)
> +		tn_info(n)->full_children--;
> +
> +	tn_info(n)->empty_children--;
>  }
>  
>  static struct key_vector *leaf_new(t_key key, struct fib_alias *fa)
> -- 
> 2.22.0.410.gd8fdbe21b5-goog
> 

  parent reply	other threads:[~2019-06-18 23:04 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-18 21:14 [PATCH] net/ipv4: fib_trie: Avoid cryptic ternary expressions Matthias Kaehlcke
2019-06-18 21:45 ` Doug Anderson
2019-06-18 22:57   ` Matthias Kaehlcke
2019-06-18 23:04 ` Nathan Chancellor [this message]
2019-06-18 23:21   ` Matthias Kaehlcke
2019-06-19  2:00     ` Alexander Duyck
2019-06-18 23:23   ` Nick Desaulniers
2019-06-19  9:36     ` Joe Perches
2019-06-19 17:41       ` Nick Desaulniers
2019-06-19 18:10         ` Joe Perches
2019-06-19 21:29 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190618230420.GA84107@archlinux-epyc \
    --to=natechancellor@gmail.com \
    --cc=alexander.h.duyck@redhat.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=davem@davemloft.net \
    --cc=dianders@chromium.org \
    --cc=kuznet@ms2.inr.ac.ru \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mka@chromium.org \
    --cc=ndesaulniers@google.com \
    --cc=netdev@vger.kernel.org \
    --cc=nhuck@google.com \
    --cc=yoshfuji@linux-ipv6.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.