2021-06-04 09:28:58

by Ricardo Ribalda

[permalink] [raw]
Subject: [PATCH] tools/perf: Do not set a variable unless it will be used

clang-13 triggers the following warning:

bench/inject-buildid.c:351:6: error: variable 'len' set but not used [-Werror,-Wunused-but-set-variable]
u64 len = 0;

This patch sets the value to len only if it will be used afterwards.

Signed-off-by: Ricardo Ribalda <[email protected]>
---
tools/perf/bench/inject-buildid.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/perf/bench/inject-buildid.c b/tools/perf/bench/inject-buildid.c
index 55d373b75791..fee69ac787b2 100644
--- a/tools/perf/bench/inject-buildid.c
+++ b/tools/perf/bench/inject-buildid.c
@@ -348,13 +348,13 @@ static int inject_build_id(struct bench_data *data, u64 *max_rss)
int status;
unsigned int i, k;
struct rusage rusage;
- u64 len = 0;
+ u64 len;

/* this makes the child to run */
if (perf_header__write_pipe(data->input_pipe[1]) < 0)
return -1;

- len += synthesize_attr(data);
+ len = synthesize_attr(data);
len += synthesize_fork(data);

for (i = 0; i < nr_mmaps; i++) {
--
2.32.0.rc1.229.g3e70b5a671-goog


2021-06-04 19:27:19

by Ricardo Ribalda

[permalink] [raw]
Subject: Re: [PATCH] tools/perf: Do not set a variable unless it will be used

Hi Peter

On Fri, 4 Jun 2021 at 11:36, Peter Zijlstra <[email protected]> wrote:
>
> On Fri, Jun 04, 2021 at 11:26:38AM +0200, Ricardo Ribalda wrote:
> > clang-13 triggers the following warning:
> >
> > bench/inject-buildid.c:351:6: error: variable 'len' set but not used [-Werror,-Wunused-but-set-variable]
> > u64 len = 0;
> >
> > This patch sets the value to len only if it will be used afterwards.
>
> My vote would be to kill that warning, what absolute shite.

My knowledge of llvm codebase is close to NULL, so it is much easier
for me to "fix" the code.

I would assume that the static analyser has found a magic condition
where the previous if always returns false, and has managed to
"optimize" the code.





--
Ricardo Ribalda

2021-06-08 11:14:34

by David Laight

[permalink] [raw]
Subject: RE: [PATCH] tools/perf: Do not set a variable unless it will be used

From: Peter Zijlstra
> Sent: 04 June 2021 10:36
>
> On Fri, Jun 04, 2021 at 11:26:38AM +0200, Ricardo Ribalda wrote:
> > clang-13 triggers the following warning:
> >
> > bench/inject-buildid.c:351:6: error: variable 'len' set but not used [-Werror,-Wunused-but-set-
> variable]
> > u64 len = 0;
> >
> > This patch sets the value to len only if it will be used afterwards.
>
> My vote would be to kill that warning, what absolute shite.

The compiler folk need their heads examining.

On one hand they are adding code to initialise everything
to avoid leaking information, and on the other they moan
when you do defensive coding.

There might be a justification for:
foo = complex_expression;
where, maybe, you might have assigned it to the wrong variable.
But for simple constants (especially on declarations)
it is really silly.

David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

2021-06-09 15:36:36

by Ricardo Ribalda

[permalink] [raw]
Subject: Re: [PATCH] tools/perf: Do not set a variable unless it will be used

Hi Peter

On Tue, 8 Jun 2021 at 13:29, Peter Zijlstra <[email protected]> wrote:
>
> On Fri, Jun 04, 2021 at 09:24:23PM +0200, Ricardo Ribalda wrote:
> > Hi Peter
> >
> > On Fri, 4 Jun 2021 at 11:36, Peter Zijlstra <[email protected]> wrote:
> > >
> > > On Fri, Jun 04, 2021 at 11:26:38AM +0200, Ricardo Ribalda wrote:
> > > > clang-13 triggers the following warning:
> > > >
> > > > bench/inject-buildid.c:351:6: error: variable 'len' set but not used [-Werror,-Wunused-but-set-variable]
> clue here: ^^^^^^^^^^^^^
>
> > > > u64 len = 0;
> > > >
> > > > This patch sets the value to len only if it will be used afterwards.
> > >
> > > My vote would be to kill that warning, what absolute shite.
> >
> > My knowledge of llvm codebase is close to NULL, so it is much easier
> > for me to "fix" the code.
>
> That's what -Wno-unused-but-set-variable is for, which is trivial to add
> to the Makefile.

Yes, that is quite easy to add, the problem is that we might hide real
bugs. I completely agree that this one is borderline :)



--
Ricardo Ribalda