Make temporary variable in _rcu_dereference non-const
[urcu.git] / include / urcu / static / pointer.h
index ca9a2f9836760dd01207508d2615ee9f43d4e555..465a6101bcb12b5708ccfb90334b00969bf6b0c3 100644 (file)
@@ -90,9 +90,15 @@ extern "C" {
 # define __URCU_DEREFERENCE_USE_ATOMIC_CONSUME
 #endif
 
 # define __URCU_DEREFERENCE_USE_ATOMIC_CONSUME
 #endif
 
+/*
+ * If p is const (the pointer itself, not what it points to), using
+ * __typeof__(p) would declare a const variable, leading to
+ * -Wincompatible-pointer-types errors.  Using `+ 0` makes it an rvalue and
+ * gets rid of the const-ness.
+ */
 #ifdef __URCU_DEREFERENCE_USE_ATOMIC_CONSUME
 # define _rcu_dereference(p) __extension__ ({                                          \
 #ifdef __URCU_DEREFERENCE_USE_ATOMIC_CONSUME
 # define _rcu_dereference(p) __extension__ ({                                          \
-                               __typeof__(p) _________p1;                              \
+                               __typeof__(p + 0) _________p1;                          \
                                __atomic_load(&(p), &_________p1, __ATOMIC_CONSUME);    \
                                (_________p1);                                          \
                        })
                                __atomic_load(&(p), &_________p1, __ATOMIC_CONSUME);    \
                                (_________p1);                                          \
                        })
This page took 0.032312 seconds and 4 git commands to generate.