lkml.org 
[lkml]   [2020]   [Sep]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2] coccinelle: misc: add uninitialized_var.cocci script
    Date
    Commit 63a0895d960a ("compiler: Remove uninitialized_var() macro") and
    commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()")
    removed uninitialized_var() and deprecated it.

    The purpose of this script is to prevent new occurrences of open-coded
    variants of uninitialized_var().

    Cc: Kees Cook <keescook@chromium.org>
    Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: Denis Efremov <efremov@linux.com>
    ---
    Changes in v2:
    - Documentation cited in the script's description
    - kernel.org link added to the diagnostics messages
    - "T *var = &var;" pattern removed
    - "var =@p var", "var =@p *(&(var))" patterns added

    .../coccinelle/misc/uninitialized_var.cocci | 51 +++++++++++++++++++
    1 file changed, 51 insertions(+)
    create mode 100644 scripts/coccinelle/misc/uninitialized_var.cocci

    diff --git a/scripts/coccinelle/misc/uninitialized_var.cocci b/scripts/coccinelle/misc/uninitialized_var.cocci
    new file mode 100644
    index 000000000000..8fa845cefe11
    --- /dev/null
    +++ b/scripts/coccinelle/misc/uninitialized_var.cocci
    @@ -0,0 +1,51 @@
    +// SPDX-License-Identifier: GPL-2.0-only
    +///
    +/// Please, don't reintroduce uninitialized_var().
    +/// From Documentation/process/deprecated.rst:
    +/// 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.
    +///
    +// 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 (https://www.kernel.org/doc/html/latest/process/deprecated.html#uninitialized-var)")
    +
    +@script:python depends on org@
    +p << r.p;
    +@@
    +
    +coccilib.org.print_todo(p[0],
    + "WARNING this kind of initialization is deprecated (https://www.kernel.org/doc/html/latest/process/deprecated.html#uninitialized-var)")
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-09-01 09:16    [W:4.474 / U:0.380 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site