69bbaae47e7399262f0daf99fd8d141a445660d9
[linux-2.6-microblaze.git] / scripts / coccinelle / misc / uninitialized_var.cocci
1 // SPDX-License-Identifier: GPL-2.0-only
2 ///
3 /// Please, don't reintroduce uninitialized_var().
4 ///
5 /// From Documentation/process/deprecated.rst,
6 /// commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()"):
7 ///  For any compiler warnings about uninitialized variables, just add
8 ///  an initializer. Using warning-silencing tricks is dangerous as it
9 ///  papers over real bugs (or can in the future), and suppresses unrelated
10 ///  compiler warnings (e.g. "unused variable"). If the compiler thinks it
11 ///  is uninitialized, either simply initialize the variable or make compiler
12 ///  changes. Keep in mind that in most cases, if an initialization is
13 ///  obviously redundant, the compiler's dead-store elimination pass will make
14 ///  sure there are no needless variable writes.
15 ///
16 /// Later, commit 3942ea7a10c9 ("deprecated.rst: Remove now removed
17 /// uninitialized_var") removed this section because all initializations of
18 /// this kind were cleaned-up from the kernel. This cocci rule checks that
19 /// the macro is not explicitly or implicitly reintroduced.
20 ///
21 // Confidence: High
22 // Copyright: (C) 2020 Denis Efremov ISPRAS
23 // Options: --no-includes --include-headers
24 //
25
26 virtual context
27 virtual report
28 virtual org
29
30 @r@
31 identifier var;
32 type T;
33 position p;
34 @@
35
36 (
37 * T var =@p var;
38 |
39 * T var =@p *(&(var));
40 |
41 * var =@p var
42 |
43 * var =@p *(&(var))
44 )
45
46 @script:python depends on report@
47 p << r.p;
48 @@
49
50 coccilib.report.print_report(p[0], "WARNING this kind of initialization is deprecated")
51
52 @script:python depends on org@
53 p << r.p;
54 @@
55
56 coccilib.org.print_todo(p[0], "WARNING this kind of initialization is deprecated")