Some versions of gcc produce a spurious warning if the result of
__atomic_compare_echange_n() is not used and the type involved
is a signed 8 bit value:
error: value computed is not used [-Werror=unused-value]
This has been seen on at least
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Work around this by using an explicit cast to void to indicate
that we don't care about the return value.
We don't currently use our atomic_cmpxchg() macro on any signed
8 bit types, but the upcoming support for the Arm v8.1-Atomics
will require it.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
Sending out my workaround as an actual patch. If this is OK I'll
put in via target-arm.next as it's a dependency for the v8.1-atomics
series.
include/qemu/atomic.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h
index d73c9e14d7..9ed39effd3 100644
--- a/include/qemu/atomic.h
+++ b/include/qemu/atomic.h
@@ -187,7 +187,7 @@
/* Returns the eventual value, failed or not */
#define atomic_cmpxchg__nocheck(ptr, old, new) ({ \
typeof_strip_qual(*ptr) _old = (old); \
- __atomic_compare_exchange_n(ptr, &_old, new, false, \
+ (void)__atomic_compare_exchange_n(ptr, &_old, new, false, \
__ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
_old; \
})
--
2.17.0
On 05/10/2018 07:36 AM, Peter Maydell wrote: > Some versions of gcc produce a spurious warning if the result of > __atomic_compare_echange_n() is not used and the type involved > is a signed 8 bit value: > error: value computed is not used [-Werror=unused-value] > This has been seen on at least > gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 > > Work around this by using an explicit cast to void to indicate > that we don't care about the return value. > > We don't currently use our atomic_cmpxchg() macro on any signed > 8 bit types, but the upcoming support for the Arm v8.1-Atomics > will require it. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > Sending out my workaround as an actual patch. If this is OK I'll > put in via target-arm.next as it's a dependency for the v8.1-atomics > series. > > include/qemu/atomic.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On 10 May 2018 at 15:37, Richard Henderson <rth@twiddle.net> wrote: > On 05/10/2018 07:36 AM, Peter Maydell wrote: >> Some versions of gcc produce a spurious warning if the result of >> __atomic_compare_echange_n() is not used and the type involved >> is a signed 8 bit value: >> error: value computed is not used [-Werror=unused-value] >> This has been seen on at least >> gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609 >> >> Work around this by using an explicit cast to void to indicate >> that we don't care about the return value. >> >> We don't currently use our atomic_cmpxchg() macro on any signed >> 8 bit types, but the upcoming support for the Arm v8.1-Atomics >> will require it. >> >> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> >> --- >> Sending out my workaround as an actual patch. If this is OK I'll >> put in via target-arm.next as it's a dependency for the v8.1-atomics >> series. >> >> include/qemu/atomic.h | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) > > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Thanks. Do we care about trying to follow up on the gcc side to find out if this is a definitely-fixed bug? -- PMM
On 05/10/2018 07:38 AM, Peter Maydell wrote: > Thanks. Do we care about trying to follow up on the gcc side > to find out if this is a definitely-fixed bug? Given I did not see the problem with gcc 6 as shipped with debian 9, I'm not overly inclined to dig further than that. r~
On 05/10/2018 11:36 AM, Peter Maydell wrote:
> Some versions of gcc produce a spurious warning if the result of
> __atomic_compare_echange_n() is not used and the type involved
> is a signed 8 bit value:
> error: value computed is not used [-Werror=unused-value]
> This has been seen on at least
> gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
>
> Work around this by using an explicit cast to void to indicate
> that we don't care about the return value.
>
> We don't currently use our atomic_cmpxchg() macro on any signed
> 8 bit types, but the upcoming support for the Arm v8.1-Atomics
> will require it.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> Sending out my workaround as an actual patch. If this is OK I'll
> put in via target-arm.next as it's a dependency for the v8.1-atomics
> series.
>
> include/qemu/atomic.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h
> index d73c9e14d7..9ed39effd3 100644
> --- a/include/qemu/atomic.h
> +++ b/include/qemu/atomic.h
> @@ -187,7 +187,7 @@
> /* Returns the eventual value, failed or not */
> #define atomic_cmpxchg__nocheck(ptr, old, new) ({ \
> typeof_strip_qual(*ptr) _old = (old); \
> - __atomic_compare_exchange_n(ptr, &_old, new, false, \
> + (void)__atomic_compare_exchange_n(ptr, &_old, new, false, \
> __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
> _old; \
> })
>
On 10/05/2018 16:36, Peter Maydell wrote:
> Some versions of gcc produce a spurious warning if the result of
> __atomic_compare_echange_n() is not used and the type involved
> is a signed 8 bit value:
> error: value computed is not used [-Werror=unused-value]
> This has been seen on at least
> gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
>
> Work around this by using an explicit cast to void to indicate
> that we don't care about the return value.
>
> We don't currently use our atomic_cmpxchg() macro on any signed
> 8 bit types, but the upcoming support for the Arm v8.1-Atomics
> will require it.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> Sending out my workaround as an actual patch. If this is OK I'll
> put in via target-arm.next as it's a dependency for the v8.1-atomics
> series.
Yes, please go ahead!
Paolo
> include/qemu/atomic.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h
> index d73c9e14d7..9ed39effd3 100644
> --- a/include/qemu/atomic.h
> +++ b/include/qemu/atomic.h
> @@ -187,7 +187,7 @@
> /* Returns the eventual value, failed or not */
> #define atomic_cmpxchg__nocheck(ptr, old, new) ({ \
> typeof_strip_qual(*ptr) _old = (old); \
> - __atomic_compare_exchange_n(ptr, &_old, new, false, \
> + (void)__atomic_compare_exchange_n(ptr, &_old, new, false, \
> __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
> _old; \
> })
>
© 2016 - 2025 Red Hat, Inc.