clang: silence "unused expression result" warning
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 22 Feb 2013 12:57:16 +0000 (07:57 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 22 Feb 2013 12:57:16 +0000 (07:57 -0500)
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 <mathieu.desnoyers@efficios.com>
urcu/system.h

index 2a45f22d9615593eda4c2c8c0ec369e500f9535c..6f314595178e98385fd72e9d48c3f82de374081b 100644 (file)
  * 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 */
This page took 0.026655 seconds and 4 git commands to generate.