blob: 38ab744a403768c063ebbb4858724e99f283f289 [file] [log] [blame]
Julia Lawall41167d02015-10-22 22:11:59 +02001/// 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// Keywords: for_each_child_of_node, etc.
9
10virtual patch
11virtual context
12virtual org
13virtual report
14
15@r exists@
16expression e1,e2;
17local idexpression n;
18iterator name for_each_node_by_name, for_each_node_by_type,
19for_each_compatible_node, for_each_matching_node,
20for_each_matching_node_and_match, for_each_child_of_node,
21for_each_available_child_of_node, for_each_node_with_property;
22iterator i;
23position p1,p2;
24statement S;
25@@
26
27(
28(
29for_each_node_by_name(n,e1) S
30|
31for_each_node_by_type(n,e1) S
32|
33for_each_compatible_node(n,e1,e2) S
34|
35for_each_matching_node(n,e1) S
36|
37for_each_matching_node_and_match(n,e1,e2) S
38|
39for_each_child_of_node(e1,n) S
40|
41for_each_available_child_of_node(e1,n) S
42|
43for_each_node_with_property(n,e1) S
44)
45&
46i@p1(...) {
47 ... when != of_node_get(n)
48 when any
49 of_node_put@p2(n);
50 ... when any
51}
52)
53
54@s exists@
55local idexpression r.n;
56statement S;
57position r.p1,r.p2;
58iterator i;
59@@
60
61 of_node_put@p2(n);
62 ... when any
63 i@p1(..., n, ...)
64 S
65
66@t depends on s && patch && !context && !org && !report@
67local idexpression n;
68position r.p2;
69@@
70
71- of_node_put@p2(n);
72
73// ----------------------------------------------------------------------------
74
75@t_context depends on s && !patch && (context || org || report)@
76local idexpression n;
77position r.p2;
78position j0;
79@@
80
81* of_node_put@j0@p2(n);
82
83// ----------------------------------------------------------------------------
84
85@script:python t_org depends on org@
86j0 << t_context.j0;
87@@
88
89msg = "ERROR: probable double put."
90coccilib.org.print_todo(j0[0], msg)
91
92// ----------------------------------------------------------------------------
93
94@script:python t_report depends on report@
95j0 << t_context.j0;
96@@
97
98msg = "ERROR: probable double put."
99coccilib.report.print_report(j0[0], msg)
100