Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  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
 12
 13virtual patch
 14virtual context
 15virtual org
 16virtual report
 17
 18@depends on patch@
 19iterator name for_each_node_by_name;
 20expression np,E;
 21identifier l;
 22@@
 23
 24for_each_node_by_name(np,...) {
 25  ... when != break;
 26      when != goto l;
 27}
 28... when != np = E
 29- of_node_put(np);
 30
 31@depends on patch@
 32iterator name for_each_node_by_type;
 33expression np,E;
 34identifier l;
 35@@
 36
 37for_each_node_by_type(np,...) {
 38  ... when != break;
 39      when != goto l;
 40}
 41... when != np = E
 42- of_node_put(np);
 43
 44@depends on patch@
 45iterator name for_each_compatible_node;
 46expression np,E;
 47identifier l;
 48@@
 49
 50for_each_compatible_node(np,...) {
 51  ... when != break;
 52      when != goto l;
 53}
 54... when != np = E
 55- of_node_put(np);
 56
 57@depends on patch@
 58iterator name for_each_matching_node;
 59expression np,E;
 60identifier l;
 61@@
 62
 63for_each_matching_node(np,...) {
 64  ... when != break;
 65      when != goto l;
 66}
 67... when != np = E
 68- of_node_put(np);
 69
 70// ----------------------------------------------------------------------
 71
 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;
 77expression np,E;
 78identifier l;
 79position p1,p2;
 80@@
 81
 82(
 83*for_each_node_by_name@p1(np,...)
 84{
 85  ... when != break;
 86      when != goto l;
 87}
 88|
 89*for_each_node_by_type@p1(np,...)
 90{
 91  ... when != break;
 92      when != goto l;
 93}
 94|
 95*for_each_compatible_node@p1(np,...)
 96{
 97  ... when != break;
 98      when != goto l;
 99}
100|
101*for_each_matching_node@p1(np,...)
102{
103  ... when != break;
104      when != goto l;
105}
106)
107... when != np = E
108* of_node_put@p2(np);
109
110@script:python depends on org@
111p1 << r.p1;
112p2 << r.p2;
113@@
114
115cocci.print_main("unneeded of_node_put",p2)
116cocci.print_secs("iterator",p1)
117
118@script:python depends on report@
119p1 << r.p1;
120p2 << r.p2;
121@@
122
123msg = "ERROR: of_node_put not needed after iterator on line %s" % (p1[0].line)
124coccilib.report.print_report(p2[0], msg)