162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/// PTR_ERR should be applied before its argument is reassigned, typically
362306a36Sopenharmony_ci/// to NULL
462306a36Sopenharmony_ci///
562306a36Sopenharmony_ci// Confidence: High
662306a36Sopenharmony_ci// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.
762306a36Sopenharmony_ci// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.
862306a36Sopenharmony_ci// URL: https://coccinelle.gitlabpages.inria.fr/website
962306a36Sopenharmony_ci// Comments:
1062306a36Sopenharmony_ci// Options: --no-includes --include-headers
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_civirtual org
1362306a36Sopenharmony_civirtual report
1462306a36Sopenharmony_civirtual context
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci@r exists@
1762306a36Sopenharmony_ciexpression e,e1;
1862306a36Sopenharmony_ciconstant c;
1962306a36Sopenharmony_ciposition p1,p2;
2062306a36Sopenharmony_ci@@
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci*e@p1 = c
2362306a36Sopenharmony_ci... when != e = e1
2462306a36Sopenharmony_ci    when != &e
2562306a36Sopenharmony_ci    when != true IS_ERR(e)
2662306a36Sopenharmony_ci*PTR_ERR@p2(e)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci@script:python depends on org@
2962306a36Sopenharmony_cip1 << r.p1;
3062306a36Sopenharmony_cip2 << r.p2;
3162306a36Sopenharmony_ci@@
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cicocci.print_main("PTR_ERR",p2)
3462306a36Sopenharmony_cicocci.print_secs("assignment",p1)
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci@script:python depends on report@
3762306a36Sopenharmony_cip1 << r.p1;
3862306a36Sopenharmony_cip2 << r.p2;
3962306a36Sopenharmony_ci@@
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cimsg = "ERROR: PTR_ERR applied after initialization to constant on line %s" % (p1[0].line)
4262306a36Sopenharmony_cicoccilib.report.print_report(p2[0],msg)
43