# 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__ ({ \
- __typeof__(p) _________p1; \
+ __typeof__(p + 0) _________p1; \
__atomic_load(&(p), &_________p1, __ATOMIC_CONSUME); \
(_________p1); \
})