[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20191020055252.2ymxfrskpodxhuxs@ltop.local>
Date: Sun, 20 Oct 2019 07:52:53 +0200
From: Luc Van Oostenryck <luc.vanoostenryck@...il.com>
To: Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Ben Dooks <ben.dooks@...ethink.co.uk>,
Sparse Mailing-list <linux-sparse@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: sparse: __pure declaration only
On Fri, Oct 18, 2019 at 08:31:48AM -0700, Linus Torvalds wrote:
> On Fri, Oct 18, 2019 at 4:15 AM Ben Dooks <ben.dooks@...ethink.co.uk> wrote:
> >
> > is this a valid warning? if not, should sparse be ignoring these.
>
> It's technically valid, but maybe it's not useful.
>
> If we make sure that any pure bits from a declaration always make it
> into the definition, then I suspect that the "was not declared"
> warning (if the definition is non-static and seen without a
> declaration) is sufficient.
>
> Of course, sparse doesn't actually _care_ about "pure" in the
> definition, only in the use, so right now it doesn't even make any
> difference to sparse whether the definition has the "pure" or not.
> It's only when the function is used that the "pure" matters (it makes
> the call instruction be CSE'd like any other random instruction).
Yes, for 'pure' it doesn't matter much but it's a problem anyway.
For example with 'static':
$ cat file.c
static void foo(void);
void foo(void) { }
$ sparse file.c
file.c:2:6: warning: symbol 'foo' was not declared. Should it be static?
Which is kinda absurd: foo() was declared and was even declared static.
But the definition is a different symbol than its declaration (OK) which
doesn't 'inherit' the declaration's specifier/modifier/attributes.
It's on my to-be-fixed list for a long time but ..
-- Luc
Powered by blists - more mailing lists