lkml.org 
[lkml]   [2019]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 046/249] perf annotate TUI browser: Do not use member from variable within its own initialization
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    [ Upstream commit da2019633f0b5c105ce658aada333422d8cb28fe ]

    Some compilers will complain when using a member of a struct to
    initialize another member, in the same struct initialization.

    For instance:

    debian:8 Debian clang version 3.5.0-10 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
    oraclelinux:7 clang version 3.4.2 (tags/RELEASE_34/dot2-final)

    Produce:

    ui/browsers/annotate.c:104:12: error: variable 'ops' is uninitialized when used within its own initialization [-Werror,-Wuninitialized]
    (!ops.current_entry ||
    ^~~
    1 error generated.

    So use an extra variable, initialized just before that struct, to have
    the value used in the expressions used to init two of the struct
    members.

    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Fixes: c298304bd747 ("perf annotate: Use a ops table for annotation_line__write()")
    Link: https://lkml.kernel.org/n/tip-f9nexro58q62l3o9hez8hr0i@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/perf/ui/browsers/annotate.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c
    index 98d934a36d86..b0d089a95dac 100644
    --- a/tools/perf/ui/browsers/annotate.c
    +++ b/tools/perf/ui/browsers/annotate.c
    @@ -97,11 +97,12 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
    struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
    struct annotation *notes = browser__annotation(browser);
    struct annotation_line *al = list_entry(entry, struct annotation_line, node);
    + const bool is_current_entry = ui_browser__is_current_entry(browser, row);
    struct annotation_write_ops ops = {
    .first_line = row == 0,
    - .current_entry = ui_browser__is_current_entry(browser, row),
    + .current_entry = is_current_entry,
    .change_color = (!notes->options->hide_src_code &&
    - (!ops.current_entry ||
    + (!is_current_entry ||
    (browser->use_navkeypressed &&
    !browser->navkeypressed))),
    .width = browser->width,
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-15 16:03    [W:4.035 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site