From: Mathieu Desnoyers Date: Fri, 22 Feb 2013 12:57:16 +0000 (-0500) Subject: clang: silence "unused expression result" warning X-Git-Tag: v0.7.7~11 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=1eedc0856e1cb304498b7eb5dcd5fc4287b6a96d;p=userspace-rcu.git clang: silence "unused expression result" warning CMM_STORE_SHARED(x, v) is a macro that really acts like an assignment expression, e.g.: x = v; but internally also has "mc" barriers (useful for cache-incoherent architectures). The issue here is that (x = v) can evaluate to "v", but very often we're not interested to use the assignment expression result. When we have an explicit assignment, the compiler won't complain that the result of this expression is unused, but given that the added barrier requires that we make this macro evaluate explicitly to a value, clang complains. Fix this by adding "_v = _v" at the last line of the macro, thus performing what would appear like an effect-less assignment, but actually tricks clang into thinking we are evaluating to an assignment expression, thus suppressing the warning. Signed-off-by: Mathieu Desnoyers --- diff --git a/urcu/system.h b/urcu/system.h index 2a45f22..6f31459 100644 --- a/urcu/system.h +++ b/urcu/system.h @@ -47,11 +47,11 @@ * Store v into x, where x is located in shared memory. Performs the * required cache flush after writing. Returns v. */ -#define CMM_STORE_SHARED(x, v) \ - ({ \ - __typeof__(x) _v = _CMM_STORE_SHARED(x, v); \ - cmm_smp_wmc(); \ - _v; \ +#define CMM_STORE_SHARED(x, v) \ + ({ \ + __typeof__(x) _v = _CMM_STORE_SHARED(x, v); \ + cmm_smp_wmc(); \ + _v = _v; /* Work around clang "unused result" */ \ }) #endif /* _URCU_SYSTEM_H */