From: Josh Triplett <josh@freedesktop.org>
To: Matthew Wilcox <matthew@wil.cx>
Cc: linux-sparse@vger.kernel.org
Subject: Re: Bogus 'not declared' warning
Date: Tue, 23 Oct 2007 12:23:23 -0700 [thread overview]
Message-ID: <471E4A2B.3080500@freedesktop.org> (raw)
In-Reply-To: <20071023142450.GP27248@parisc-linux.org>
[-- Attachment #1: Type: text/plain, Size: 1857 bytes --]
Matthew Wilcox wrote:
> Seems to me that sparse ignores 'static' forward declarations, leading
> to false warnings like this:
>
> /home/willy/kernel/linux-2.6/drivers/scsi/sym53c8xx_2/sym_hipd.c:3786:5: warning: symbol 'sym_compute_residual' was not declared. Should it be static?
>
> $ grep -n sym_compute_residual drivers/scsi/sym53c8xx_2/*
> drivers/scsi/sym53c8xx_2/sym_hipd.c:61:static int sym_compute_residual(struct sym_hcb *np, struct sym_ccb *cp);
> drivers/scsi/sym53c8xx_2/sym_hipd.c:3033: cp->sv_resid = sym_compute_residual(np, cp);
> drivers/scsi/sym53c8xx_2/sym_hipd.c:3786:int sym_compute_residual(struct sym_hcb *np, struct sym_ccb *cp)
Interesting; yes, it looks like the routine emitting that warning
doesn't check for a symbol marked static by having a previous static
declaration. That warning comes from check_duplicates in evaluate.c.
Seeing it means Sparse didn't see any previous declaration of the
symbol by checking the same_symbol linked list, which seems wrong.
check_declaration in symbol.c hooks symbols into those lists. That
implies 1) the scopes don't match and 2) one or the other symbol
doesn't have extern. The latter should clearly hold true (that case,
IIRC, handles letting you put extern declarations inside inner
scopes). I think the former occurs because one declaration has file
scope and the other one global scope, but that has a chicken-and-egg
issue in the case of a static forward declaration: the static forward
declaration applies, and makes the later declaration have file scope.
I *think* the right fix involves changing check_declaration to check
for this case specifically:
if (next->scope == file_scope && sym->scope == global_scope) {
sym->scope = file_scope;
sym->same_symbol = next;
return;
}
Will test this later.
- Josh Triplett
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 252 bytes --]
next prev parent reply other threads:[~2007-10-23 19:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-23 14:24 Bogus 'not declared' warning Matthew Wilcox
2007-10-23 19:23 ` Josh Triplett [this message]
2007-11-13 12:13 ` Josh Triplett
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=471E4A2B.3080500@freedesktop.org \
--to=josh@freedesktop.org \
--cc=linux-sparse@vger.kernel.org \
--cc=matthew@wil.cx \
/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 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).