WIP FPC-III support
[linux/fpc-iii.git] / scripts / coccinelle / iterators / fen.cocci
blobb69f9665f4fb9b2a3a3bb227f901cd387b154e0e
1 // SPDX-License-Identifier: GPL-2.0-only
2 /// These iterators only exit normally when the loop cursor is NULL, so there
3 /// is no point to call of_node_put on the final value.
4 ///
5 // Confidence: High
6 // Copyright: (C) 2010-2012 Nicolas Palix.
7 // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
8 // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
9 // URL: http://coccinelle.lip6.fr/
10 // Comments:
11 // Options: --no-includes --include-headers
13 virtual patch
14 virtual context
15 virtual org
16 virtual report
18 @depends on patch@
19 iterator name for_each_node_by_name;
20 expression np,E;
21 identifier l;
24 for_each_node_by_name(np,...) {
25   ... when != break;
26       when != goto l;
28 ... when != np = E
29 - of_node_put(np);
31 @depends on patch@
32 iterator name for_each_node_by_type;
33 expression np,E;
34 identifier l;
37 for_each_node_by_type(np,...) {
38   ... when != break;
39       when != goto l;
41 ... when != np = E
42 - of_node_put(np);
44 @depends on patch@
45 iterator name for_each_compatible_node;
46 expression np,E;
47 identifier l;
50 for_each_compatible_node(np,...) {
51   ... when != break;
52       when != goto l;
54 ... when != np = E
55 - of_node_put(np);
57 @depends on patch@
58 iterator name for_each_matching_node;
59 expression np,E;
60 identifier l;
63 for_each_matching_node(np,...) {
64   ... when != break;
65       when != goto l;
67 ... when != np = E
68 - of_node_put(np);
70 // ----------------------------------------------------------------------
72 @r depends on !patch forall@
73 //iterator name for_each_node_by_name;
74 //iterator name for_each_node_by_type;
75 //iterator name for_each_compatible_node;
76 //iterator name for_each_matching_node;
77 expression np,E;
78 identifier l;
79 position p1,p2;
83 *for_each_node_by_name@p1(np,...)
85   ... when != break;
86       when != goto l;
89 *for_each_node_by_type@p1(np,...)
91   ... when != break;
92       when != goto l;
95 *for_each_compatible_node@p1(np,...)
97   ... when != break;
98       when != goto l;
101 *for_each_matching_node@p1(np,...)
103   ... when != break;
104       when != goto l;
107 ... when != np = E
108 * of_node_put@p2(np);
110 @script:python depends on org@
111 p1 << r.p1;
112 p2 << r.p2;
115 cocci.print_main("unneeded of_node_put",p2)
116 cocci.print_secs("iterator",p1)
118 @script:python depends on report@
119 p1 << r.p1;
120 p2 << r.p2;
123 msg = "ERROR: of_node_put not needed after iterator on line %s" % (p1[0].line)
124 coccilib.report.print_report(p2[0], msg)