Thread (5 messages) 5 messages, 3 authors, 2017-03-14
  • coccinelle · Tobin C. Harding <hidden> · 2017-03-14
  • coccinelle · peter.senna@gmail.com (Peter Senna Tschudin) · 2017-03-14
  • coccinelle · Tobin C. Harding <hidden> · 2017-03-14
  • coccinelle · Nicholas Mc Guire <hidden> · 2017-03-14
  • coccinelle · Tobin C. Harding <hidden> · 2017-03-14

coccinelle

From: Nicholas Mc Guire <hidden>
Date: 2017-03-14 08:26:08

On Tue, Mar 14, 2017 at 06:21:06PM +1100, Tobin C. Harding wrote:
quoted hunk ↗ jump to hunk
Attempting to do transform using Coccinelle

if (foo != 0) {
   ...

->

if (foo) {
   ...

Coccinelle script attempt does not work
@@ expression x; @@
(
- x != 0
+ x
)
I think you do not need the () here as you only are providing one semanntic patch
the only thing that was missing is the virtual rule - so using this simple spatch
file works for me 

<snip>
virtual patch

@tonull@
expression x;
@@

- x != 0
+ x
<snip>

hofrat at debian01:~/git/linux-next$ spatch --sp-file x.cocci --dir kernel/ | more
init_defs_builtins: /usr/local/lib/coccinelle/standard.h
no inferred keywords
HANDLING: kernel/sched/cpudeadline.c
diff = 
HANDLING: kernel/sched/swait.c
diff -u -p a/sched/cpudeadline.c b/sched/cpudeadline.c
--- a/sched/cpudeadline.c
+++ b/sched/cpudeadline.c
@@ -80,7 +80,7 @@ static void cpudl_heapify_up(struct cpud
        int orig_cpu = cp->elements[idx].cpu;
        u64 orig_dl = cp->elements[idx].dl;
 
-       if (idx == 0)
+       if (!idx)
                return;
....

quoted hunk ↗ jump to hunk
`spatch --parse-cocci script.cocci` appears to pass. A similar script
worked correctly
@@ expression x; @@
(
- x == 0
+ !x
)
likewise

<snip>
virtual patch

@tontnull@
expression x;
@@

- x == 0
+ !x
<snip>

Using: spatch --version
spatch version 1.0.6-00033-g23cca0a compiled with OCaml version 4.0
.0
Flags passed to the configure script: [none]
Python scripting support: yes
Syntax of regular expresssions: PCRE

I have read various papers and tutorials to no avail. I have tried
various other versions also with no success.

Any pointers most appreciated.
first you might want to read through the myriads of examples that
come with coccinelle in the kernel:
scripts/coccinelle/*
Documentation/dev-tools/coccinelle.rst

as well as the documentation in coccinelle repository:
URL: https://github.com/coccinelle/coccinelle 

And for specific technologies like semantic patches it is best to signeup
to the coccinelle mailing list and send such questions to
 Cocci at systeme.lip6.fr
archive at: https://systeme.lip6.fr/mailman/listinfo/cocci

thx!
hofrat
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help