Loading...
1/// Device node iterators put the previous value of the index variable, so an
2/// explicit put causes a double put.
3///
4// Confidence: High
5// Copyright: (C) 2015 Julia Lawall, Inria. GPLv2.
6// URL: http://coccinelle.lip6.fr/
7// Options: --no-includes --include-headers
8// Requires: 1.0.4
9// Keywords: for_each_child_of_node, etc.
10
11// This uses a conjunction, which requires at least coccinelle >= 1.0.4
12
13virtual patch
14virtual context
15virtual org
16virtual report
17
18@r exists@
19expression e1,e2;
20local idexpression n;
21iterator name for_each_node_by_name, for_each_node_by_type,
22for_each_compatible_node, for_each_matching_node,
23for_each_matching_node_and_match, for_each_child_of_node,
24for_each_available_child_of_node, for_each_node_with_property;
25iterator i;
26position p1,p2;
27statement S;
28@@
29
30(
31(
32for_each_node_by_name(n,e1) S
33|
34for_each_node_by_type(n,e1) S
35|
36for_each_compatible_node(n,e1,e2) S
37|
38for_each_matching_node(n,e1) S
39|
40for_each_matching_node_and_match(n,e1,e2) S
41|
42for_each_child_of_node(e1,n) S
43|
44for_each_available_child_of_node(e1,n) S
45|
46for_each_node_with_property(n,e1) S
47)
48&
49i@p1(...) {
50 ... when != of_node_get(n)
51 when any
52 of_node_put@p2(n);
53 ... when any
54}
55)
56
57@s exists@
58local idexpression r.n;
59statement S;
60position r.p1,r.p2;
61iterator i;
62@@
63
64 of_node_put@p2(n);
65 ... when any
66 i@p1(..., n, ...)
67 S
68
69@t depends on s && patch && !context && !org && !report@
70local idexpression n;
71position r.p2;
72@@
73
74- of_node_put@p2(n);
75
76// ----------------------------------------------------------------------------
77
78@t_context depends on s && !patch && (context || org || report)@
79local idexpression n;
80position r.p2;
81position j0;
82@@
83
84* of_node_put@j0@p2(n);
85
86// ----------------------------------------------------------------------------
87
88@script:python t_org depends on org@
89j0 << t_context.j0;
90@@
91
92msg = "ERROR: probable double put."
93coccilib.org.print_todo(j0[0], msg)
94
95// ----------------------------------------------------------------------------
96
97@script:python t_report depends on report@
98j0 << t_context.j0;
99@@
100
101msg = "ERROR: probable double put."
102coccilib.report.print_report(j0[0], msg)
103
1// SPDX-License-Identifier: GPL-2.0-only
2/// Device node iterators put the previous value of the index variable, so an
3/// explicit put causes a double put.
4///
5// Confidence: High
6// Copyright: (C) 2015 Julia Lawall, Inria.
7// URL: https://coccinelle.gitlabpages.inria.fr/website
8// Options: --no-includes --include-headers
9// Requires: 1.0.4
10// Keywords: for_each_child_of_node, etc.
11
12// This uses a conjunction, which requires at least coccinelle >= 1.0.4
13
14virtual patch
15virtual context
16virtual org
17virtual report
18
19@r exists@
20expression e1,e2;
21local idexpression n;
22iterator name for_each_node_by_name, for_each_node_by_type,
23for_each_compatible_node, for_each_matching_node,
24for_each_matching_node_and_match, for_each_child_of_node,
25for_each_available_child_of_node, for_each_node_with_property;
26iterator i;
27position p1,p2;
28statement S;
29@@
30
31(
32(
33for_each_node_by_name(n,e1) S
34|
35for_each_node_by_type(n,e1) S
36|
37for_each_compatible_node(n,e1,e2) S
38|
39for_each_matching_node(n,e1) S
40|
41for_each_matching_node_and_match(n,e1,e2) S
42|
43for_each_child_of_node(e1,n) S
44|
45for_each_available_child_of_node(e1,n) S
46|
47for_each_node_with_property(n,e1) S
48)
49&
50i@p1(...) {
51 ... when != of_node_get(n)
52 when any
53 of_node_put@p2(n);
54 ... when any
55}
56)
57
58@s exists@
59local idexpression r.n;
60statement S;
61position r.p1,r.p2;
62iterator i;
63@@
64
65 of_node_put@p2(n);
66 ... when any
67 i@p1(..., n, ...)
68 S
69
70@t depends on s && patch && !context && !org && !report@
71local idexpression n;
72position r.p2;
73@@
74
75- of_node_put@p2(n);
76
77// ----------------------------------------------------------------------------
78
79@t_context depends on s && !patch && (context || org || report)@
80local idexpression n;
81position r.p2;
82position j0;
83@@
84
85* of_node_put@j0@p2(n);
86
87// ----------------------------------------------------------------------------
88
89@script:python t_org depends on org@
90j0 << t_context.j0;
91@@
92
93msg = "ERROR: probable double put."
94coccilib.org.print_todo(j0[0], msg)
95
96// ----------------------------------------------------------------------------
97
98@script:python t_report depends on report@
99j0 << t_context.j0;
100@@
101
102msg = "ERROR: probable double put."
103coccilib.report.print_report(j0[0], msg)
104