Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / scripts / coccinelle / tests / odd_ptr_err.cocci
1 /// PTR_ERR should access the value just tested by IS_ERR
2 //# There can be false positives in the patch case, where it is the call
3 //# IS_ERR that is wrong.
4 ///
5 // Confidence: High
6 // Copyright: (C) 2012 Julia Lawall, INRIA.  GPLv2.
7 // Copyright: (C) 2012 Gilles Muller, INRIA.  GPLv2.
8 // URL: http://coccinelle.lip6.fr/
9 // Comments:
10 // Options: --no-includes --include-headers
11
12 virtual patch
13 virtual context
14 virtual org
15 virtual report
16
17 @depends on patch@
18 expression e,e1;
19 @@
20
21 (
22 if (IS_ERR(e)) { ... PTR_ERR(e) ... }
23 |
24 if (IS_ERR(e=e1)) { ... PTR_ERR(e) ... }
25 |
26 if (IS_ERR(e))
27  { ...
28   PTR_ERR(
29 -   e1
30 +   e
31   )
32    ... }
33 )
34
35 @r depends on !patch@
36 expression e,e1;
37 position p1,p2;
38 @@
39
40 (
41 if (IS_ERR(e)) { ... PTR_ERR(e) ... }
42 |
43 if (IS_ERR(e=e1)) { ... PTR_ERR(e) ... }
44 |
45 *if (IS_ERR@p1(e))
46  { ...
47 *  PTR_ERR@p2(e1)
48    ... }
49 )
50
51 @script:python depends on org@
52 p1 << r.p1;
53 p2 << r.p2;
54 @@
55
56 cocci.print_main("inconsistent IS_ERR and PTR_ERR",p1)
57 cocci.print_secs("PTR_ERR",p2)
58
59 @script:python depends on report@
60 p1 << r.p1;
61 p2 << r.p2;
62 @@
63
64 msg = "inconsistent IS_ERR and PTR_ERR, PTR_ERR on line %s" % (p2[0].line)
65 coccilib.report.print_report(p1[0],msg)