From: Josh Triplett <josht@linux.vnet.ibm.com>
To: Geoff Johnstone <geoffsheep.johnstonefrog@googlemail.com>
Cc: Josh Triplett <josh@kernel.org>, linux-sparse@vger.kernel.org
Subject: Re: multiple source files [was four sparse patches]
Date: Fri, 27 Jun 2008 11:47:57 -0700 [thread overview]
Message-ID: <1214592477.5189.7.camel@josh-work.beaverton.ibm.com> (raw)
In-Reply-To: <32e600e90805021158vb6be3c9jbb75c3a61345448@mail.gmail.com>
On Fri, 2008-05-02 at 19:58 +0100, Geoff Johnstone wrote:
> Take three files:
>
> /* test.h */
> typedef struct foo *Foo;
>
> void a (Foo foo);
> void b (Foo foo);
>
>
> /* test1.c */
> #include "test.h"
> void a (Foo foo) { }
>
>
> /* test2.c */
> #include "test.h"
> void b (Foo foo) { }
>
>
> With sparse 0.4.1:
>
> $ sparse test1.c
> $ sparse test2.c
> $ sparse test[12].c
> test2.c:3:6: error: symbol 'b' redeclared with different type
> (originally declared at test.h:4) - incompatible argument 1 (different
> base types)
>
> ...i.e. the problem only occurs with multiple source files on the
> sparse command line. (The userland project mentioned above has a build
> system that invokes the compiler once, passing all necessary source
> files, because it also builds on Windows, where process creation is
> remarkably slow so invoking cl.exe once per source file is prohibitive).
I've observed this problem as well, and I would like to see it fixed.
Many other legitimate reasons exist to run the compiler on many files at
once. For example, consider GCC's --combine and -fwhole-program
options.
> I think that the problem may be rooted in main():
> // Expand, linearize and show it.
> check_symbols(sparse_initialize(argc, argv, &filelist));
> FOR_EACH_PTR_NOTAG(filelist, file) {
> check_symbols(sparse(file));
> } END_FOR_EACH_PTR_NOTAG(file);
>
> i.e. sparse doesn't reinitialize for each source file.
>
> My patch a few weeks ago silences the error, but in the light of this
> I think that it's working around rather than fixing the problem. The
> "correct" fix would seem to be to re-initialise sparse for each source
> file. However, sparse's data structures weren't written with this in
> mind, so a patch would be rather invasive. It might be simpler to say
> that sparse must only be invoked on one source file and to modify cgcc
> instead?
I'd like Sparse to handle multiple files on the same command line. I
don't mind invasive patches, though as always I'd like to see them
broken up into incremental patches when possible.
I don't necessarily want Sparse fully re-initialized to the point where
it forgets what it learned from the previous source files. Remembering
the contents of previous files can only help with cross-module analysis.
However, Sparse needs to isolate symbols by file, and avoid carrying
over the visible symbols from one file to the next.
- Josh Triplett
next prev parent reply other threads:[~2008-06-27 18:48 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-02 18:58 multiple source files [was four sparse patches] Geoff Johnstone
2008-06-27 18:47 ` Josh Triplett [this message]
2008-06-27 19:40 ` Sam Ravnborg
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=1214592477.5189.7.camel@josh-work.beaverton.ibm.com \
--to=josht@linux.vnet.ibm.com \
--cc=geoffsheep.johnstonefrog@googlemail.com \
--cc=josh@kernel.org \
--cc=linux-sparse@vger.kernel.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 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).