[<prev] [next>] [day] [month] [year] [list]
Message-ID: <4CF8D56B.2010208@suse.cz>
Date: Fri, 03 Dec 2010 12:32:59 +0100
From: Michal Marek <mmarek@...e.cz>
To: Julia Lawall <julia@...u.dk>
Cc: npalix.work@...il.com, lkml <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v3] scripts/coccinelle: update for compatability with
Coccinelle 0.2.4
On 24.11.2010 15:54, Julia Lawall wrote:
> From: Julia Lawall <julia@...u.dk>
>
> For doubleinit.cocci, Coccinelle 0.2.4 requires a comma after ... in a
> field list. Coccinelle also now behaves gracefully when a definition is
> provided for a virtual that doesn't exist, so there is no need for the
> semantic patch code to check for this case.
>
> Updated the documentation to reflect the fact that the best results will
> now be obtained with Coccinelle version 0.2.4 or later.
>
> Signed-off-by: Julia Lawall <julia@...u.dk>
Applied to kbuild-2.6.git#misc, thanks. BTW, please always CC lkml when
sending patches.
Michal
>
> ---
> Documentation/coccinelle.txt | 4 +++
> scripts/coccinelle/misc/doubleinit.cocci | 6 ++--
> scripts/coccinelle/null/deref_null.cocci | 39 +++++++++++--------------------
> 3 files changed, 21 insertions(+), 28 deletions(-)
>
> diff --git a/Documentation/coccinelle.txt b/Documentation/coccinelle.txt
> index 4a276ea..96b6903 100644
> --- a/Documentation/coccinelle.txt
> +++ b/Documentation/coccinelle.txt
> @@ -36,6 +36,10 @@ as a regular user, and install it with
>
> sudo make install
>
> +The semantic patches in the kernel will work best with Coccinelle version
> +0.2.4 or later. Using earlier versions may incur some parse errors in the
> +semantic patch code, but any results that are obtained should still be
> +correct.
>
> Using Coccinelle on the Linux kernel
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> diff --git a/scripts/coccinelle/misc/doubleinit.cocci b/scripts/coccinelle/misc/doubleinit.cocci
> index 55d7dc1..156b20a 100644
> --- a/scripts/coccinelle/misc/doubleinit.cocci
> +++ b/scripts/coccinelle/misc/doubleinit.cocci
> @@ -7,7 +7,7 @@
> // Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
> // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
> // URL: http://coccinelle.lip6.fr/
> -// Comments:
> +// Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise
> // Options: -no_includes -include_headers
>
> virtual org
> @@ -19,7 +19,7 @@ position p0,p;
> expression E;
> @@
>
> -struct I s =@p0 { ... .fld@p = E, ...};
> +struct I s =@p0 { ..., .fld@p = E, ...};
>
> @s@
> identifier I, s, r.fld;
> @@ -27,7 +27,7 @@ position r.p0,p;
> expression E;
> @@
>
> -struct I s =@p0 { ... .fld@p = E, ...};
> +struct I s =@p0 { ..., .fld@p = E, ...};
>
> @script:python depends on org@
> p0 << r.p0;
> diff --git a/scripts/coccinelle/null/deref_null.cocci b/scripts/coccinelle/null/deref_null.cocci
> index 9969d76..cdac6cf 100644
> --- a/scripts/coccinelle/null/deref_null.cocci
> +++ b/scripts/coccinelle/null/deref_null.cocci
> @@ -11,21 +11,10 @@
> // Options:
>
> virtual context
> -virtual patch
> virtual org
> virtual report
>
> -@...tialize:python depends on !context && patch && !org && !report@
> -
> -import sys
> -print >> sys.stderr, "This semantic patch does not support the 'patch' mode."
> -
> -@...ends on patch@
> -@@
> -
> -this_rule_should_never_matches();
> -
> -@ifm depends on !patch@
> +@ifm@
> expression *E;
> statement S1,S2;
> position p1;
> @@ -35,7 +24,7 @@ if@p1 ((E == NULL && ...) || ...) S1 else S2
>
> // The following two rules are separate, because both can match a single
> // expression in different ways
> -@pr1 depends on !patch expression@
> +@pr1 expression@
> expression *ifm.E;
> identifier f;
> position p1;
> @@ -43,7 +32,7 @@ position p1;
>
> (E != NULL && ...) ? <+...E->f@.....+> : ...
>
> -@pr2 depends on !patch expression@
> +@pr2 expression@
> expression *ifm.E;
> identifier f;
> position p2;
> @@ -59,7 +48,7 @@ position p2;
>
> // For org and report modes
>
> -@r depends on !context && !patch && (org || report) exists@
> +@r depends on !context && (org || report) exists@
> expression subE <= ifm.E;
> expression *ifm.E;
> expression E1,E2;
> @@ -99,7 +88,7 @@ if@p1 ((E == NULL && ...) || ...)
> }
> else S3
>
> -@...ipt:python depends on !context && !patch && !org && report@
> +@...ipt:python depends on !context && !org && report@
> p << r.p;
> p1 << ifm.p1;
> x << ifm.E;
> @@ -109,7 +98,7 @@ msg="ERROR: %s is NULL but dereferenced." % (x)
> coccilib.report.print_report(p[0], msg)
> cocci.include_match(False)
>
> -@...ipt:python depends on !context && !patch && org && !report@
> +@...ipt:python depends on !context && org && !report@
> p << r.p;
> p1 << ifm.p1;
> x << ifm.E;
> @@ -120,7 +109,7 @@ msg_safe=msg.replace("[","@(").replace("]",")")
> cocci.print_main(msg_safe,p)
> cocci.include_match(False)
>
> -@s depends on !context && !patch && (org || report) exists@
> +@s depends on !context && (org || report) exists@
> expression subE <= ifm.E;
> expression *ifm.E;
> expression E1,E2;
> @@ -159,7 +148,7 @@ if@p1 ((E == NULL && ...) || ...)
> }
> else S3
>
> -@...ipt:python depends on !context && !patch && !org && report@
> +@...ipt:python depends on !context && !org && report@
> p << s.p;
> p1 << ifm.p1;
> x << ifm.E;
> @@ -168,7 +157,7 @@ x << ifm.E;
> msg="ERROR: %s is NULL but dereferenced." % (x)
> coccilib.report.print_report(p[0], msg)
>
> -@...ipt:python depends on !context && !patch && org && !report@
> +@...ipt:python depends on !context && org && !report@
> p << s.p;
> p1 << ifm.p1;
> x << ifm.E;
> @@ -180,7 +169,7 @@ cocci.print_main(msg_safe,p)
>
> // For context mode
>
> -@...ends on context && !patch && !org && !report exists@
> +@...ends on context && !org && !report exists@
> expression subE <= ifm.E;
> expression *ifm.E;
> expression E1,E2;
> @@ -223,7 +212,7 @@ else S3
> // The following three rules are duplicates of ifm, pr1 and pr2 respectively.
> // It is need because the previous rule as already made a "change".
>
> -@...1 depends on !patch@
> +@...1@
> expression *E;
> statement S1,S2;
> position p1;
> @@ -231,7 +220,7 @@ position p1;
>
> if@p1 ((E == NULL && ...) || ...) S1 else S2
>
> -@...1 depends on !patch expression@
> +@...1 expression@
> expression *ifm1.E;
> identifier f;
> position p1;
> @@ -239,7 +228,7 @@ position p1;
>
> (E != NULL && ...) ? <+...E->f@.....+> : ...
>
> -@...2 depends on !patch expression@
> +@...2 expression@
> expression *ifm1.E;
> identifier f;
> position p2;
> @@ -253,7 +242,7 @@ position p2;
> sizeof(<+...E->f@.....+>)
> )
>
> -@...ends on context && !patch && !org && !report exists@
> +@...ends on context && !org && !report exists@
> expression subE <= ifm1.E;
> expression *ifm1.E;
> expression E1,E2;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists