diff options
author | Julia Lawall <julia@diku.dk> | 2010-11-24 09:54:18 -0500 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2010-12-03 06:27:01 -0500 |
commit | a1087ef6abedf0bfd60e5e3fddf33192cb2c1325 (patch) | |
tree | 684f6ee97a32ff93c6cf5a0009bc87246cc90222 /scripts/coccinelle/null | |
parent | 0a18a9386c056028799938960f91be338c4ff349 (diff) |
scripts/coccinelle: update for compatability with Coccinelle 0.2.4
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@diku.dk>
Diffstat (limited to 'scripts/coccinelle/null')
-rw-r--r-- | scripts/coccinelle/null/deref_null.cocci | 39 |
1 files changed, 14 insertions, 25 deletions
diff --git a/scripts/coccinelle/null/deref_null.cocci b/scripts/coccinelle/null/deref_null.cocci index 9969d76d0f4b..cdac6cfcce92 100644 --- a/scripts/coccinelle/null/deref_null.cocci +++ b/scripts/coccinelle/null/deref_null.cocci | |||
@@ -11,21 +11,10 @@ | |||
11 | // Options: | 11 | // Options: |
12 | 12 | ||
13 | virtual context | 13 | virtual context |
14 | virtual patch | ||
15 | virtual org | 14 | virtual org |
16 | virtual report | 15 | virtual report |
17 | 16 | ||
18 | @initialize:python depends on !context && patch && !org && !report@ | 17 | @ifm@ |
19 | |||
20 | import sys | ||
21 | print >> sys.stderr, "This semantic patch does not support the 'patch' mode." | ||
22 | |||
23 | @depends on patch@ | ||
24 | @@ | ||
25 | |||
26 | this_rule_should_never_matches(); | ||
27 | |||
28 | @ifm depends on !patch@ | ||
29 | expression *E; | 18 | expression *E; |
30 | statement S1,S2; | 19 | statement S1,S2; |
31 | position p1; | 20 | position p1; |
@@ -35,7 +24,7 @@ if@p1 ((E == NULL && ...) || ...) S1 else S2 | |||
35 | 24 | ||
36 | // The following two rules are separate, because both can match a single | 25 | // The following two rules are separate, because both can match a single |
37 | // expression in different ways | 26 | // expression in different ways |
38 | @pr1 depends on !patch expression@ | 27 | @pr1 expression@ |
39 | expression *ifm.E; | 28 | expression *ifm.E; |
40 | identifier f; | 29 | identifier f; |
41 | position p1; | 30 | position p1; |
@@ -43,7 +32,7 @@ position p1; | |||
43 | 32 | ||
44 | (E != NULL && ...) ? <+...E->f@p1...+> : ... | 33 | (E != NULL && ...) ? <+...E->f@p1...+> : ... |
45 | 34 | ||
46 | @pr2 depends on !patch expression@ | 35 | @pr2 expression@ |
47 | expression *ifm.E; | 36 | expression *ifm.E; |
48 | identifier f; | 37 | identifier f; |
49 | position p2; | 38 | position p2; |
@@ -59,7 +48,7 @@ position p2; | |||
59 | 48 | ||
60 | // For org and report modes | 49 | // For org and report modes |
61 | 50 | ||
62 | @r depends on !context && !patch && (org || report) exists@ | 51 | @r depends on !context && (org || report) exists@ |
63 | expression subE <= ifm.E; | 52 | expression subE <= ifm.E; |
64 | expression *ifm.E; | 53 | expression *ifm.E; |
65 | expression E1,E2; | 54 | expression E1,E2; |
@@ -99,7 +88,7 @@ if@p1 ((E == NULL && ...) || ...) | |||
99 | } | 88 | } |
100 | else S3 | 89 | else S3 |
101 | 90 | ||
102 | @script:python depends on !context && !patch && !org && report@ | 91 | @script:python depends on !context && !org && report@ |
103 | p << r.p; | 92 | p << r.p; |
104 | p1 << ifm.p1; | 93 | p1 << ifm.p1; |
105 | x << ifm.E; | 94 | x << ifm.E; |
@@ -109,7 +98,7 @@ msg="ERROR: %s is NULL but dereferenced." % (x) | |||
109 | coccilib.report.print_report(p[0], msg) | 98 | coccilib.report.print_report(p[0], msg) |
110 | cocci.include_match(False) | 99 | cocci.include_match(False) |
111 | 100 | ||
112 | @script:python depends on !context && !patch && org && !report@ | 101 | @script:python depends on !context && org && !report@ |
113 | p << r.p; | 102 | p << r.p; |
114 | p1 << ifm.p1; | 103 | p1 << ifm.p1; |
115 | x << ifm.E; | 104 | x << ifm.E; |
@@ -120,7 +109,7 @@ msg_safe=msg.replace("[","@(").replace("]",")") | |||
120 | cocci.print_main(msg_safe,p) | 109 | cocci.print_main(msg_safe,p) |
121 | cocci.include_match(False) | 110 | cocci.include_match(False) |
122 | 111 | ||
123 | @s depends on !context && !patch && (org || report) exists@ | 112 | @s depends on !context && (org || report) exists@ |
124 | expression subE <= ifm.E; | 113 | expression subE <= ifm.E; |
125 | expression *ifm.E; | 114 | expression *ifm.E; |
126 | expression E1,E2; | 115 | expression E1,E2; |
@@ -159,7 +148,7 @@ if@p1 ((E == NULL && ...) || ...) | |||
159 | } | 148 | } |
160 | else S3 | 149 | else S3 |
161 | 150 | ||
162 | @script:python depends on !context && !patch && !org && report@ | 151 | @script:python depends on !context && !org && report@ |
163 | p << s.p; | 152 | p << s.p; |
164 | p1 << ifm.p1; | 153 | p1 << ifm.p1; |
165 | x << ifm.E; | 154 | x << ifm.E; |
@@ -168,7 +157,7 @@ x << ifm.E; | |||
168 | msg="ERROR: %s is NULL but dereferenced." % (x) | 157 | msg="ERROR: %s is NULL but dereferenced." % (x) |
169 | coccilib.report.print_report(p[0], msg) | 158 | coccilib.report.print_report(p[0], msg) |
170 | 159 | ||
171 | @script:python depends on !context && !patch && org && !report@ | 160 | @script:python depends on !context && org && !report@ |
172 | p << s.p; | 161 | p << s.p; |
173 | p1 << ifm.p1; | 162 | p1 << ifm.p1; |
174 | x << ifm.E; | 163 | x << ifm.E; |
@@ -180,7 +169,7 @@ cocci.print_main(msg_safe,p) | |||
180 | 169 | ||
181 | // For context mode | 170 | // For context mode |
182 | 171 | ||
183 | @depends on context && !patch && !org && !report exists@ | 172 | @depends on context && !org && !report exists@ |
184 | expression subE <= ifm.E; | 173 | expression subE <= ifm.E; |
185 | expression *ifm.E; | 174 | expression *ifm.E; |
186 | expression E1,E2; | 175 | expression E1,E2; |
@@ -223,7 +212,7 @@ else S3 | |||
223 | // The following three rules are duplicates of ifm, pr1 and pr2 respectively. | 212 | // The following three rules are duplicates of ifm, pr1 and pr2 respectively. |
224 | // It is need because the previous rule as already made a "change". | 213 | // It is need because the previous rule as already made a "change". |
225 | 214 | ||
226 | @ifm1 depends on !patch@ | 215 | @ifm1@ |
227 | expression *E; | 216 | expression *E; |
228 | statement S1,S2; | 217 | statement S1,S2; |
229 | position p1; | 218 | position p1; |
@@ -231,7 +220,7 @@ position p1; | |||
231 | 220 | ||
232 | if@p1 ((E == NULL && ...) || ...) S1 else S2 | 221 | if@p1 ((E == NULL && ...) || ...) S1 else S2 |
233 | 222 | ||
234 | @pr11 depends on !patch expression@ | 223 | @pr11 expression@ |
235 | expression *ifm1.E; | 224 | expression *ifm1.E; |
236 | identifier f; | 225 | identifier f; |
237 | position p1; | 226 | position p1; |
@@ -239,7 +228,7 @@ position p1; | |||
239 | 228 | ||
240 | (E != NULL && ...) ? <+...E->f@p1...+> : ... | 229 | (E != NULL && ...) ? <+...E->f@p1...+> : ... |
241 | 230 | ||
242 | @pr12 depends on !patch expression@ | 231 | @pr12 expression@ |
243 | expression *ifm1.E; | 232 | expression *ifm1.E; |
244 | identifier f; | 233 | identifier f; |
245 | position p2; | 234 | position p2; |
@@ -253,7 +242,7 @@ position p2; | |||
253 | sizeof(<+...E->f@p2...+>) | 242 | sizeof(<+...E->f@p2...+>) |
254 | ) | 243 | ) |
255 | 244 | ||
256 | @depends on context && !patch && !org && !report exists@ | 245 | @depends on context && !org && !report exists@ |
257 | expression subE <= ifm1.E; | 246 | expression subE <= ifm1.E; |
258 | expression *ifm1.E; | 247 | expression *ifm1.E; |
259 | expression E1,E2; | 248 | expression E1,E2; |