From: Nathan Chancellor <natechancellor@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Lee Jones <lee.jones@linaro.org>,
clang-built-linux@googlegroups.com,
Nick Desaulniers <ndesaulniers@google.com>,
Charles Keepax <ckeepax@opensource.cirrus.com>,
Linus Walleij <linus.walleij@linaro.org>,
Sapthagiri Baratam <sapthagiri.baratam@cirrus.com>,
Colin Ian King <colin.king@canonical.com>,
patches@opensource.cirrus.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mfd: arizona: fix undefined behavior
Date: Fri, 22 Mar 2019 08:57:04 -0700 [thread overview]
Message-ID: <20190322155704.GC21978@archlinux-ryzen> (raw)
In-Reply-To: <20190322143345.1208144-1-arnd@arndb.de>
On Fri, Mar 22, 2019 at 03:33:37PM +0100, Arnd Bergmann wrote:
> When the driver is used with a subdevice that is disabled in the
> kernel configuration, clang gets a little confused about the
> control flow and fails to notice that n_subdevs is only
> uninitialized when subdevs is NULL, and we check for that,
> leading to a false-positive warning:
>
> drivers/mfd/arizona-core.c:1423:19: error: variable 'n_subdevs' is uninitialized when used here
> [-Werror,-Wuninitialized]
> subdevs, n_subdevs, NULL, 0, NULL);
> ^~~~~~~~~
> drivers/mfd/arizona-core.c:999:15: note: initialize the variable 'n_subdevs' to silence this warning
> int n_subdevs, ret, i;
> ^
> = 0
>
> Ideally, we would rearrange the code to avoid all those early
> initializations and have an explicit exit in each disabled case,
> but it's much easier to chicken out and add one more initialization
> here to shut up the warning.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Took me a bit to follow the flow of this function. I agree that without
restructuring it, zero initializing this variable to shut up the warning
is the path of least resistance (clang must evaluate variables in
isolation like I did until I fully read the commit message *facepalm*).
Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
> ---
> drivers/mfd/arizona-core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
> index 27b61639cdc7..0ca0fc9a67fd 100644
> --- a/drivers/mfd/arizona-core.c
> +++ b/drivers/mfd/arizona-core.c
> @@ -996,7 +996,7 @@ int arizona_dev_init(struct arizona *arizona)
> unsigned int reg, val;
> int (*apply_patch)(struct arizona *) = NULL;
> const struct mfd_cell *subdevs = NULL;
> - int n_subdevs, ret, i;
> + int n_subdevs = 0, ret, i;
>
> dev_set_drvdata(arizona->dev, arizona);
> mutex_init(&arizona->clk_lock);
> --
> 2.20.0
>
next prev parent reply other threads:[~2019-03-22 15:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-22 14:33 [PATCH] mfd: arizona: fix undefined behavior Arnd Bergmann
2019-03-22 15:57 ` Nathan Chancellor [this message]
2019-03-22 17:03 ` Charles Keepax
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=20190322155704.GC21978@archlinux-ryzen \
--to=natechancellor@gmail.com \
--cc=arnd@arndb.de \
--cc=ckeepax@opensource.cirrus.com \
--cc=clang-built-linux@googlegroups.com \
--cc=colin.king@canonical.com \
--cc=lee.jones@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ndesaulniers@google.com \
--cc=patches@opensource.cirrus.com \
--cc=sapthagiri.baratam@cirrus.com \
/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.