1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0-only 2*4882a593Smuzhiyun/// PTR_ERR should be applied before its argument is reassigned, typically 3*4882a593Smuzhiyun/// to NULL 4*4882a593Smuzhiyun/// 5*4882a593Smuzhiyun// Confidence: High 6*4882a593Smuzhiyun// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. 7*4882a593Smuzhiyun// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. 8*4882a593Smuzhiyun// URL: http://coccinelle.lip6.fr/ 9*4882a593Smuzhiyun// Comments: 10*4882a593Smuzhiyun// Options: --no-includes --include-headers 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunvirtual org 13*4882a593Smuzhiyunvirtual report 14*4882a593Smuzhiyunvirtual context 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun@r exists@ 17*4882a593Smuzhiyunexpression e,e1; 18*4882a593Smuzhiyunconstant c; 19*4882a593Smuzhiyunposition p1,p2; 20*4882a593Smuzhiyun@@ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun*e@p1 = c 23*4882a593Smuzhiyun... when != e = e1 24*4882a593Smuzhiyun when != &e 25*4882a593Smuzhiyun when != true IS_ERR(e) 26*4882a593Smuzhiyun*PTR_ERR@p2(e) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun@script:python depends on org@ 29*4882a593Smuzhiyunp1 << r.p1; 30*4882a593Smuzhiyunp2 << r.p2; 31*4882a593Smuzhiyun@@ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyuncocci.print_main("PTR_ERR",p2) 34*4882a593Smuzhiyuncocci.print_secs("assignment",p1) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun@script:python depends on report@ 37*4882a593Smuzhiyunp1 << r.p1; 38*4882a593Smuzhiyunp2 << r.p2; 39*4882a593Smuzhiyun@@ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyunmsg = "ERROR: PTR_ERR applied after initialization to constant on line %s" % (p1[0].line) 42*4882a593Smuzhiyuncoccilib.report.print_report(p2[0],msg) 43