Message ID | 20180319055504.757-1-sergey.senozhatsky@gmail.com |
---|---|
State | New, archived |
Headers | show |
Series |
|
Related | show |
On Mon, Mar 19, 2018 at 02:55:04PM +0900, Sergey Senozhatsky wrote: > Commit c8b5f2c96d1bf6c ("tools: Introduce str_error_r()") added > an str_error_r() wrapper which makes gcc8 unhappy due to > restrict-qualified parameter aliasing violation: > > ../lib/str_error_r.c: In function ‘str_error_r’: > ../lib/str_error_r.c:25:3: error: passing argument 1 to restrict-qualified parameter aliases with argument 5 [-Werror=restrict] > snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); > ^~~~~~~~ > cc1: all warnings being treated as errors > > Workaround that aliasing error by creating an additional stack > variable which holds the buf pointer value we passed to strerror_r(). > > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Josh posted another way to fix it: https://marc.info/?l=linux-kernel&m=152116992412107&w=2 your patch keeps the same output, I dont mind either way ;-) jirka > --- > tools/lib/str_error_r.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/tools/lib/str_error_r.c b/tools/lib/str_error_r.c > index d6d65537b0d9..11c3425f272b 100644 > --- a/tools/lib/str_error_r.c > +++ b/tools/lib/str_error_r.c > @@ -21,7 +21,12 @@ > char *str_error_r(int errnum, char *buf, size_t buflen) > { > int err = strerror_r(errnum, buf, buflen); > - if (err) > - snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); > + if (err) { > + char *err_buf = buf; > + > + snprintf(err_buf, buflen, > + "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", > + errnum, buf, buflen, err); > + } > return buf; > } > -- > 2.16.2 >
On (03/19/18 08:18), Jiri Olsa wrote: > On Mon, Mar 19, 2018 at 02:55:04PM +0900, Sergey Senozhatsky wrote: > > Commit c8b5f2c96d1bf6c ("tools: Introduce str_error_r()") added > > an str_error_r() wrapper which makes gcc8 unhappy due to > > restrict-qualified parameter aliasing violation: > > > > ../lib/str_error_r.c: In function ‘str_error_r’: > > ../lib/str_error_r.c:25:3: error: passing argument 1 to restrict-qualified parameter aliases with argument 5 [-Werror=restrict] > > snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); > > ^~~~~~~~ > > cc1: all warnings being treated as errors > > > > Workaround that aliasing error by creating an additional stack > > variable which holds the buf pointer value we passed to strerror_r(). > > > > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> > > Josh posted another way to fix it: > https://marc.info/?l=linux-kernel&m=152116992412107&w=2 Oh, thanks for the pointers. > your patch keeps the same output, I dont mind either way ;-) Thanks. No strong opinion, either way is OK :) Can't tell for sure if snprintf(... "%p", buf) is significantly better than snprintf(... "[buf]"), but Arnaldo wanted to have the first version. -ss
Em Mon, Mar 19, 2018 at 02:55:04PM +0900, Sergey Senozhatsky escreveu: > Commit c8b5f2c96d1bf6c ("tools: Introduce str_error_r()") added > an str_error_r() wrapper which makes gcc8 unhappy due to > restrict-qualified parameter aliasing violation: > > ../lib/str_error_r.c: In function ‘str_error_r’: > ../lib/str_error_r.c:25:3: error: passing argument 1 to restrict-qualified parameter aliases with argument 5 [-Werror=restrict] > snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); > ^~~~~~~~ > cc1: all warnings being treated as errors I applied Josh's patch, just printing '[buf]', that is good enough, I think. - Arnaldo > Workaround that aliasing error by creating an additional stack > variable which holds the buf pointer value we passed to strerror_r(). > > Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> > --- > tools/lib/str_error_r.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/tools/lib/str_error_r.c b/tools/lib/str_error_r.c > index d6d65537b0d9..11c3425f272b 100644 > --- a/tools/lib/str_error_r.c > +++ b/tools/lib/str_error_r.c > @@ -21,7 +21,12 @@ > char *str_error_r(int errnum, char *buf, size_t buflen) > { > int err = strerror_r(errnum, buf, buflen); > - if (err) > - snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); > + if (err) { > + char *err_buf = buf; > + > + snprintf(err_buf, buflen, > + "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", > + errnum, buf, buflen, err); > + } > return buf; > } > -- > 2.16.2
On (03/19/18 11:16), Arnaldo Carvalho de Melo wrote: > Em Mon, Mar 19, 2018 at 02:55:04PM +0900, Sergey Senozhatsky escreveu: > > Commit c8b5f2c96d1bf6c ("tools: Introduce str_error_r()") added > > an str_error_r() wrapper which makes gcc8 unhappy due to > > restrict-qualified parameter aliasing violation: > > > > ../lib/str_error_r.c: In function ‘str_error_r’: > > ../lib/str_error_r.c:25:3: error: passing argument 1 to restrict-qualified parameter aliases with argument 5 [-Werror=restrict] > > snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); > > ^~~~~~~~ > > cc1: all warnings being treated as errors > > I applied Josh's patch, just printing '[buf]', that is good enough, I > think. Sure. Do you need the whole "strerror_r(%d, %p, %zd)" in this case? Seems that printing out just `errnum' should be good enough. -ss
diff --git a/tools/lib/str_error_r.c b/tools/lib/str_error_r.c index d6d65537b0d9..11c3425f272b 100644 --- a/tools/lib/str_error_r.c +++ b/tools/lib/str_error_r.c @@ -21,7 +21,12 @@ char *str_error_r(int errnum, char *buf, size_t buflen) { int err = strerror_r(errnum, buf, buflen); - if (err) - snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); + if (err) { + char *err_buf = buf; + + snprintf(err_buf, buflen, + "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", + errnum, buf, buflen, err); + } return buf; }
Commit c8b5f2c96d1bf6c ("tools: Introduce str_error_r()") added an str_error_r() wrapper which makes gcc8 unhappy due to restrict-qualified parameter aliasing violation: ../lib/str_error_r.c: In function ‘str_error_r’: ../lib/str_error_r.c:25:3: error: passing argument 1 to restrict-qualified parameter aliases with argument 5 [-Werror=restrict] snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); ^~~~~~~~ cc1: all warnings being treated as errors Workaround that aliasing error by creating an additional stack variable which holds the buf pointer value we passed to strerror_r(). Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> --- tools/lib/str_error_r.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)