linux-sparse.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Konrad Eisele <eiselekd@gmail.com>
To: Josh Triplett <josh@joshtriplett.org>
Cc: Konrad Eisele <konrad@gaisler.com>,
	Christopher Li <sparse@chrisli.org>,
	linux-sparse@vger.kernel.org
Subject: Re: dependency tee from c parser entities downto token
Date: Fri, 04 May 2012 22:53:52 +0200	[thread overview]
Message-ID: <4FA441E0.6010701@gmail.com> (raw)
In-Reply-To: <20120504153054.GA5994@leaf>

On 05/04/2012 05:30 PM, Josh Triplett wrote:
> On Fri, May 04, 2012 at 02:36:40PM +0200, Konrad Eisele wrote:
>> Take the 2 files b.c and a.h.
>>
>> vvvvvv b.c vvvvv
>> #define d1
>> #include "a.h"
>> struct s0 { int x; };
>> int main(int a, char **b) {
>>    struct s0 v;
>>    d2(m);
>> };
>> ^^^^^^ b.c ^^^^^^
>>
>> vvvvvv a.h vvvvv
>> #ifdef d2
>> #define m v
>> #else
>> #define m n
>> #endif
>>
>> #ifdef d1
>> #define d2(a) while(a.x) { }
>> #endif
>> ^^^^^^ a.h ^^^^^^
>>
>> Now use sparse and you get:
>> $./sparse b.c
>> b.c:6:3: error: cannot dereference this type
>>
>> The error was that you forgot in b.c:
>> +#define d2
>>   #define d1
>>   ...
>>
>> When you have a dependency tree what you can printout is:
>>
>> $./sparse b.c
>> b.c:6:3: error: cannot dereference this type
>>   +macro expansion of d2 defined in a.h:8
>>     + defined because of #ifdef d1 in a.h:7
>>      + dependent of d1 defined at b.c:1
>>   +>  argument 0 expansion at b.c:6
>>     + macro expansion m defined in a.h:4
>>       + defined because of else of #ifdef d2
>>         + dependend of d2 (not defined)
>
> That looks wildly useful to me.  I'd love to see that information
> available to Sparse somehow, as long as it doesn't significantly impact
> the performance of the common case (namely, running sparse on code that
> has no warnings or errors).
>
> One idea: could you check the impact of your patch on a Linux kernel
> build (with defconfig)?  Try building the kernel with sparse (make C=2),
> with and without your patch, and measure the total time.  If your patch
> has negligible impact on build time, and it doesn't require changing
> every other line of Sparse due to interface changes, it should prove
> reasonable.

make C=2:

original sparse:
real    17m54.997s
user    15m25.181s
sys     2m11.281s

decpp-sparse from "git clone git://git.code.sf.net/p/decpp/code decpp "
real    18m29.748s
user    16m18.155s
sys     2m13.221s

But decpp is not written with performance in common cases in mind.
The 2 runs probably also depend on other factors too.
I cant think that 4 bytes extra for each token can have a big impact,
if I would implement it that way (it is not in decpp).

>
> The other key point: much like Linux, Sparse doesn't normally accept
> patches that add a new interface without a patch adding the
> corresponding code that uses that interface.  Having an implementation
> helps ensure that the design of an interface fits its intended purpose.
> For instance, if you could create a simple example of the kind of output
> you showed above (even just saying in a warning message "expanded from
> macro foo"), perhaps modeled after LLVM's clang error messages, and
> include that in a second patch depending on the first, then that
> two-patch sequence would have a much better chance of getting in.

I understand. Actually the code to demonstrate is
git://git.code.sf.net/p/decpp/code , then do a
$make
$./shrinkc t1.c
That is kind of the goal.
And - it does require some  internal structure
change. You dont get this kind of functionality
for free. You have to be invasive, isnt this
something that is obvious?. And in my view, it
can come with penalty. The preprocessing stage
is not something that should be neglected all
the time as if not existent. You struggle
with Macros half of the time you program.


-- Konrad


>
> Hope that helps,
> Josh Triplett
>


  reply	other threads:[~2012-05-04 20:50 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-24  9:54 dependency tee from c parser entities downto token Konrad Eisele
2012-04-25 20:10 ` [PATCH] depend.c: build up a dependency tree from c entities downto tokens: entries in the tree are: macro-depend: tree of #if nesting macro-expansions: possible macro expansion source of a token tok->macro-expansions->macro tok->macro-depend->macro c entities are linked in via [stmt|expr|sym]->start-end-token Konrad Eisele
2012-04-30 22:58 ` dependency tee from c parser entities downto token Christopher Li
2012-05-02  7:27   ` Konrad Eisele
2012-05-03 23:52     ` Christopher Li
2012-05-04  7:33       ` Konrad Eisele
2012-05-04  9:25         ` Christopher Li
2012-05-04 10:36           ` Konrad Eisele
2012-05-04 12:36             ` Konrad Eisele
2012-05-04 15:30               ` Josh Triplett
2012-05-04 20:53                 ` Konrad Eisele [this message]
2012-05-04 22:30                   ` Christopher Li
2012-05-05  0:32                     ` Josh Triplett
2012-05-05  8:59                       ` Konrad Eisele
2012-05-05  8:56                     ` Konrad Eisele
2012-05-04 18:02             ` Christopher Li
2012-05-04 21:46               ` Konrad Eisele
2012-05-04 21:56                 ` Konrad Eisele
2012-05-04 23:05                 ` Christopher Li
2012-05-05  8:54                   ` Konrad Eisele
2012-05-05 11:12                     ` Christopher Li
2012-05-05 16:59                       ` Konrad Eisele
     [not found]                         ` <CANeU7Qn7vUzLQAF6JGRECro_pPDnL7MCswkrNACe1wohLHZu7g@mail.gmail.com>
2012-05-05 19:56                           ` Fwd: " Christopher Li
2012-05-05 23:38                             ` Konrad Eisele
2012-05-06 18:34                               ` Christopher Li
2012-05-07  6:12                                 ` Konrad Eisele
2012-05-07 22:06                                   ` Christopher Li
2012-05-08  6:38                                     ` Konrad Eisele
2012-05-09  9:18                                       ` Christopher Li
2012-05-09  9:48                                         ` Konrad Eisele
2012-05-09 22:50                                           ` Christopher Li
2012-05-10  6:19                                             ` Konrad Eisele
2012-05-10  6:38                                               ` Konrad Eisele
2012-05-10  9:37                                                 ` Christopher Li
2012-05-10  9:51                                                   ` Konrad Eisele
2012-05-10 11:25                                                     ` Christopher Li
2012-05-10 12:14                                                       ` Konrad Eisele
2012-05-10 12:28                                                         ` Konrad Eisele
2012-05-11 19:40                                                           ` Christopher Li
2012-05-11 21:48                                                             ` Konrad Eisele
2012-05-12 11:02                                                               ` Christopher Li
2012-05-12 17:46                                                                 ` Konrad Eisele
2012-05-12 17:57                                                                   ` Konrad Eisele
2012-05-13  8:52                                                                   ` Konrad Eisele
2012-05-15  6:30                                                                     ` Christopher Li
2012-05-15  7:52                                                                       ` Konrad Eisele
2012-05-15  9:44                                                                         ` Christopher Li
2012-05-15 13:03                                                                           ` Konrad Eisele
2012-05-14 10:53                                                                   ` Christopher Li
2012-05-10  9:03                                               ` Christopher Li

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=4FA441E0.6010701@gmail.com \
    --to=eiselekd@gmail.com \
    --cc=josh@joshtriplett.org \
    --cc=konrad@gaisler.com \
    --cc=linux-sparse@vger.kernel.org \
    --cc=sparse@chrisli.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).