Linux Audio

Check our new training course

Loading...
v6.8
  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
v6.2
  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