2023-07-24 20:47:39

by Ian Rogers

[permalink] [raw]
Subject: [PATCH v1 2/4] perf parse-events: Avoid use uninitialized warning

With GCC LTO a potential use uninitialized is spotted:
```
In function ‘parse_events_config_bpf’,
inlined from ‘parse_events_load_bpf’ at util/parse-events.c:874:8:
util/parse-events.c:792:37: error: ‘error_pos’ may be used uninitialized [-Werror=maybe-uninitialized]
792 | idx = term->err_term + error_pos;
| ^
util/parse-events.c: In function ‘parse_events_load_bpf’:
util/parse-events.c:765:13: note: ‘error_pos’ was declared here
765 | int error_pos;
| ^
```
So initialize at declaration.

Signed-off-by: Ian Rogers <[email protected]>
---
tools/perf/util/parse-events.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index acde097e327c..da29061ecf49 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -762,7 +762,7 @@ parse_events_config_bpf(struct parse_events_state *parse_state,
struct list_head *head_config)
{
struct parse_events_term *term;
- int error_pos;
+ int error_pos = 0;

if (!head_config || list_empty(head_config))
return 0;
--
2.41.0.487.g6d72f3e995-goog



2023-07-24 21:37:53

by Nick Desaulniers

[permalink] [raw]
Subject: Re: [PATCH v1 2/4] perf parse-events: Avoid use uninitialized warning

On Mon, Jul 24, 2023 at 1:13 PM Ian Rogers <[email protected]> wrote:
>
> With GCC LTO a potential use uninitialized is spotted:
> ```
> In function ‘parse_events_config_bpf’,
> inlined from ‘parse_events_load_bpf’ at util/parse-events.c:874:8:
> util/parse-events.c:792:37: error: ‘error_pos’ may be used uninitialized [-Werror=maybe-uninitialized]
> 792 | idx = term->err_term + error_pos;
> | ^
> util/parse-events.c: In function ‘parse_events_load_bpf’:
> util/parse-events.c:765:13: note: ‘error_pos’ was declared here
> 765 | int error_pos;
> | ^
> ```
> So initialize at declaration.

This common pattern in C is error prone (conditional assignment in the
callee; callers maybe forget to initialize, then unconditionally use
the value). Clang's static analyzer can spot these, but isn't run for
tools/ AFAIK.

Reviewed-by: Nick Desaulniers <[email protected]>

>
> Signed-off-by: Ian Rogers <[email protected]>
> ---
> tools/perf/util/parse-events.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> index acde097e327c..da29061ecf49 100644
> --- a/tools/perf/util/parse-events.c
> +++ b/tools/perf/util/parse-events.c
> @@ -762,7 +762,7 @@ parse_events_config_bpf(struct parse_events_state *parse_state,
> struct list_head *head_config)
> {
> struct parse_events_term *term;
> - int error_pos;
> + int error_pos = 0;
>
> if (!head_config || list_empty(head_config))
> return 0;
> --
> 2.41.0.487.g6d72f3e995-goog
>


--
Thanks,
~Nick Desaulniers