| // SPDX-License-Identifier: GPL-2.0-only |
| /// |
| /// Please, don't reintroduce uninitialized_var(). |
| /// |
| /// From Documentation/process/deprecated.rst, |
| /// commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()"): |
| /// For any compiler warnings about uninitialized variables, just add |
| /// an initializer. Using warning-silencing tricks is dangerous as it |
| /// papers over real bugs (or can in the future), and suppresses unrelated |
| /// compiler warnings (e.g. "unused variable"). If the compiler thinks it |
| /// is uninitialized, either simply initialize the variable or make compiler |
| /// changes. Keep in mind that in most cases, if an initialization is |
| /// obviously redundant, the compiler's dead-store elimination pass will make |
| /// sure there are no needless variable writes. |
| /// |
| /// Later, commit 3942ea7a10c9 ("deprecated.rst: Remove now removed |
| /// uninitialized_var") removed this section because all initializations of |
| /// this kind were cleaned-up from the kernel. This cocci rule checks that |
| /// the macro is not explicitly or implicitly reintroduced. |
| /// |
| // Confidence: High |
| // Copyright: (C) 2020 Denis Efremov ISPRAS |
| // Options: --no-includes --include-headers |
| // |
| |
| virtual context |
| virtual report |
| virtual org |
| |
| @r@ |
| identifier var; |
| type T; |
| position p; |
| @@ |
| |
| ( |
| * T var =@p var; |
| | |
| * T var =@p *(&(var)); |
| | |
| * var =@p var |
| | |
| * var =@p *(&(var)) |
| ) |
| |
| @script:python depends on report@ |
| p << r.p; |
| @@ |
| |
| coccilib.report.print_report(p[0], "WARNING this kind of initialization is deprecated") |
| |
| @script:python depends on org@ |
| p << r.p; |
| @@ |
| |
| coccilib.org.print_todo(p[0], "WARNING this kind of initialization is deprecated") |