xref: /linux/scripts/coccinelle/misc/uninitialized_var.cocci (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
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
26virtual context
27virtual report
28virtual org
29
30@r@
31identifier var;
32type T;
33position 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@
47p << r.p;
48@@
49
50coccilib.report.print_report(p[0], "WARNING this kind of initialization is deprecated")
51
52@script:python depends on org@
53p << r.p;
54@@
55
56coccilib.org.print_todo(p[0], "WARNING this kind of initialization is deprecated")
57