[PATCH 08/18] Coccinelle: Add iterators/itnull.cocci

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Nicolas Palix
Date: Tuesday, August 24, 2010 - 8:39 am

Many iterators have the property that the first argument is always bound
to a real list element, never NULL.  False positives arise for some
iterators that do not have this property, or in cases when the loop
cursor is reassigned.  The latter should only happen when the matched
code is on the way to a loop exit (break, goto, or return).

Signed-off-by: Nicolas Palix <npalix@diku.dk>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
 scripts/coccinelle/iterators/itnull.cocci |   58 +++++++++++++++++++++++++++++
 1 files changed, 58 insertions(+), 0 deletions(-)
 create mode 100644 scripts/coccinelle/iterators/itnull.cocci

diff --git a/scripts/coccinelle/iterators/itnull.cocci b/scripts/coccinelle/iterators/itnull.cocci
new file mode 100644
index 0000000..baa4297
--- /dev/null
+++ b/scripts/coccinelle/iterators/itnull.cocci
@@ -0,0 +1,58 @@
+/// Many iterators have the property that the first argument is always bound
+/// to a real list element, never NULL.  False positives arise for some
+/// iterators that do not have this property, or in cases when the loop
+/// cursor is reassigned.  The latter should only happen when the matched
+/// code is on the way to a loop exit (break, goto, or return).
+///
+// Confidence: Moderate
+// Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
+// Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
+// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
+// URL: http://coccinelle.lip6.fr/
+// Comments:
+// Options: -no_includes -include_headers
+
+virtual patch
+
+@@
+iterator I;
+expression x,E,E1,E2;
+statement S,S1,S2;
+@@
+
+I(x,...) { <...
+(
+- if (x == NULL && ...) S
+|
+- if (x != NULL || ...)
+  S
+|
+- (x == NULL) ||
+  E
+|
+- (x != NULL) &&
+  E
+|
+- (x == NULL && ...) ? E1 :
+  E2
+|
+- (x != NULL || ...) ?
+  E1
+- : E2
+|
+- if (x == NULL && ...) S1 else
+  S2
+|
+- if (x != NULL || ...)
+  S1
+- else S2
+|
++ BAD(
+  x == NULL
++ )
+|
++ BAD(
+  x != NULL
++ )
+)
+  ...> }
\ No newline at end of file
-- 
1.7.0.4

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 01/18] Coccinelle: Add null/eno.cocci, Nicolas Palix, (Tue Aug 24, 8:38 am)
[PATCH 02/18] Coccinelle: Add null/kmerr.cocci, Nicolas Palix, (Tue Aug 24, 8:38 am)
[PATCH 04/18] Coccinelle: Add locks/call_kern.cocci, Nicolas Palix, (Tue Aug 24, 8:38 am)
[PATCH 05/18] Coccinelle: Add locks/double_lock.cocci, Nicolas Palix, (Tue Aug 24, 8:38 am)
[PATCH 06/18] Coccinelle: Add locks/mini_lock.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 07/18] Coccinelle: Add iterators/fen.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 08/18] Coccinelle: Add iterators/itnull.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 10/18] Coccinelle: Add free/kfree.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 11/18] Coccinelle: Add api/kstrdup.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 12/18] Coccinelle: Add api/memdup.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 13/18] Coccinelle: Add api/memdup_user, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 17/18] Coccinelle: Add misc/doubleinit.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)
[PATCH 18/18] Coccinelle: Add misc/ifcol.cocci, Nicolas Palix, (Tue Aug 24, 8:39 am)