18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/// PTR_ERR should be applied before its argument is reassigned, typically
38c2ecf20Sopenharmony_ci/// to NULL
48c2ecf20Sopenharmony_ci///
58c2ecf20Sopenharmony_ci// Confidence: High
68c2ecf20Sopenharmony_ci// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
78c2ecf20Sopenharmony_ci// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
88c2ecf20Sopenharmony_ci// URL: http://coccinelle.lip6.fr/
98c2ecf20Sopenharmony_ci// Comments:
108c2ecf20Sopenharmony_ci// Options: --no-includes --include-headers
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_civirtual org
138c2ecf20Sopenharmony_civirtual report
148c2ecf20Sopenharmony_civirtual context
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci@r exists@
178c2ecf20Sopenharmony_ciexpression e,e1;
188c2ecf20Sopenharmony_ciconstant c;
198c2ecf20Sopenharmony_ciposition p1,p2;
208c2ecf20Sopenharmony_ci@@
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci*e@p1 = c
238c2ecf20Sopenharmony_ci... when != e = e1
248c2ecf20Sopenharmony_ci    when != &e
258c2ecf20Sopenharmony_ci    when != true IS_ERR(e)
268c2ecf20Sopenharmony_ci*PTR_ERR@p2(e)
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci@script:python depends on org@
298c2ecf20Sopenharmony_cip1 << r.p1;
308c2ecf20Sopenharmony_cip2 << r.p2;
318c2ecf20Sopenharmony_ci@@
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cicocci.print_main("PTR_ERR",p2)
348c2ecf20Sopenharmony_cicocci.print_secs("assignment",p1)
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci@script:python depends on report@
378c2ecf20Sopenharmony_cip1 << r.p1;
388c2ecf20Sopenharmony_cip2 << r.p2;
398c2ecf20Sopenharmony_ci@@
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_cimsg = "ERROR: PTR_ERR applied after initialization to constant on line %s" % (p1[0].line)
428c2ecf20Sopenharmony_cicoccilib.report.print_report(p2[0],msg)
43