1e8fa600eSJulia Lawall/// PTR_ERR should access the value just tested by IS_ERR
202da7b42SJulia Lawall//# There can be false positives in the patch case, where it is the call to
3e8fa600eSJulia Lawall//# IS_ERR that is wrong.
4e8fa600eSJulia Lawall///
5e8fa600eSJulia Lawall// Confidence: High
602da7b42SJulia Lawall// Copyright: (C) 2012, 2015 Julia Lawall, INRIA.  GPLv2.
702da7b42SJulia Lawall// Copyright: (C) 2012, 2015 Gilles Muller, INRIA.  GPLv2.
8e8fa600eSJulia Lawall// URL: http://coccinelle.lip6.fr/
993f14468SNicolas Palix// Options: --no-includes --include-headers
10e8fa600eSJulia Lawall
11e8fa600eSJulia Lawallvirtual patch
12e8fa600eSJulia Lawallvirtual context
13e8fa600eSJulia Lawallvirtual org
14e8fa600eSJulia Lawallvirtual report
15e8fa600eSJulia Lawall
1602da7b42SJulia Lawall@ok1 exists@
1702da7b42SJulia Lawallexpression x,e;
1802da7b42SJulia Lawallposition p;
19e8fa600eSJulia Lawall@@
20e8fa600eSJulia Lawall
2102da7b42SJulia Lawallif (IS_ERR(x=e) || ...) {
2202da7b42SJulia Lawall  <...
2302da7b42SJulia Lawall   PTR_ERR@p(x)
2402da7b42SJulia Lawall  ...>
2502da7b42SJulia Lawall}
2602da7b42SJulia Lawall
2702da7b42SJulia Lawall@ok2 exists@
2802da7b42SJulia Lawallexpression x,e1,e2;
2902da7b42SJulia Lawallposition p;
3002da7b42SJulia Lawall@@
3102da7b42SJulia Lawall
3202da7b42SJulia Lawallif (IS_ERR(x) || ...) {
3302da7b42SJulia Lawall  <...
34e8fa600eSJulia Lawall(
3502da7b42SJulia Lawall   PTR_ERR@p(\(e1 ? e2 : x\|e1 ? x : e2\))
36e8fa600eSJulia Lawall|
3702da7b42SJulia Lawall   PTR_ERR@p(x)
38e8fa600eSJulia Lawall)
3902da7b42SJulia Lawall  ...>
4002da7b42SJulia Lawall}
41e8fa600eSJulia Lawall
4202da7b42SJulia Lawall@r1 depends on patch && !context && !org && !report exists@
4302da7b42SJulia Lawallexpression x,y;
4402da7b42SJulia Lawallposition p != {ok1.p,ok2.p};
45e8fa600eSJulia Lawall@@
46e8fa600eSJulia Lawall
4702da7b42SJulia Lawallif (IS_ERR(x) || ...) {
4802da7b42SJulia Lawall  ... when any
4902da7b42SJulia Lawall      when != IS_ERR(...)
50e8fa600eSJulia Lawall(
5102da7b42SJulia Lawall  PTR_ERR(x)
52e8fa600eSJulia Lawall|
5302da7b42SJulia Lawall  PTR_ERR@p(
5402da7b42SJulia Lawall-     y
5502da7b42SJulia Lawall+     x
56e8fa600eSJulia Lawall  )
5702da7b42SJulia Lawall)
5802da7b42SJulia Lawall  ... when any
5902da7b42SJulia Lawall}
60e8fa600eSJulia Lawall
6102da7b42SJulia Lawall// ----------------------------------------------------------------------------
6202da7b42SJulia Lawall
6302da7b42SJulia Lawall@r1_context depends on !patch && (context || org || report) exists@
6402da7b42SJulia Lawallposition p != {ok1.p,ok2.p};
6502da7b42SJulia Lawallexpression x, y;
6602da7b42SJulia Lawallposition j0, j1;
67e8fa600eSJulia Lawall@@
68e8fa600eSJulia Lawall
6902da7b42SJulia Lawallif (IS_ERR@j0(x) || ...) {
7002da7b42SJulia Lawall  ... when any
7102da7b42SJulia Lawall      when != IS_ERR(...)
7202da7b42SJulia Lawall(
7302da7b42SJulia Lawall  PTR_ERR(x)
7402da7b42SJulia Lawall|
7502da7b42SJulia Lawall  PTR_ERR@j1@p(
7602da7b42SJulia Lawall     y
7702da7b42SJulia Lawall  )
7802da7b42SJulia Lawall)
7902da7b42SJulia Lawall  ... when any
8002da7b42SJulia Lawall}
81e8fa600eSJulia Lawall
8202da7b42SJulia Lawall@r1_disj depends on !patch && (context || org || report) exists@
8302da7b42SJulia Lawallposition p != {ok1.p,ok2.p};
8402da7b42SJulia Lawallexpression x, y;
8502da7b42SJulia Lawallposition r1_context.j0, r1_context.j1;
86e8fa600eSJulia Lawall@@
87e8fa600eSJulia Lawall
8802da7b42SJulia Lawall* if (IS_ERR@j0(x) || ...) {
8902da7b42SJulia Lawall  ... when any
9002da7b42SJulia Lawall      when != IS_ERR(...)
9102da7b42SJulia Lawall*   PTR_ERR@j1@p(
9202da7b42SJulia Lawall     y
9302da7b42SJulia Lawall  )
9402da7b42SJulia Lawall  ... when any
9502da7b42SJulia Lawall}
9602da7b42SJulia Lawall
9702da7b42SJulia Lawall// ----------------------------------------------------------------------------
9802da7b42SJulia Lawall
9902da7b42SJulia Lawall@script:python r1_org depends on org@
10002da7b42SJulia Lawallj0 << r1_context.j0;
10102da7b42SJulia Lawallj1 << r1_context.j1;
10202da7b42SJulia Lawall@@
10302da7b42SJulia Lawall
10402da7b42SJulia Lawallmsg = "inconsistent IS_ERR and PTR_ERR"
10502da7b42SJulia Lawallcoccilib.org.print_todo(j0[0], msg)
10602da7b42SJulia Lawallcoccilib.org.print_link(j1[0], "")
10702da7b42SJulia Lawall
10802da7b42SJulia Lawall// ----------------------------------------------------------------------------
10902da7b42SJulia Lawall
11002da7b42SJulia Lawall@script:python r1_report depends on report@
11102da7b42SJulia Lawallj0 << r1_context.j0;
11202da7b42SJulia Lawallj1 << r1_context.j1;
11302da7b42SJulia Lawall@@
11402da7b42SJulia Lawall
11502da7b42SJulia Lawallmsg = "inconsistent IS_ERR and PTR_ERR on line %s." % (j1[0].line)
11602da7b42SJulia Lawallcoccilib.report.print_report(j0[0], msg)
11702da7b42SJulia Lawall
118