aboutsummaryrefslogtreecommitdiffstats
path: root/common/atomic.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/atomic.h')
-rw-r--r--common/atomic.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/common/atomic.h b/common/atomic.h
index 874d510d..2033476b 100644
--- a/common/atomic.h
+++ b/common/atomic.h
@@ -4,6 +4,19 @@
#include "static_assert.h"
#include "bool.h"
+#ifdef __GNUC__
+/* This helps cast away the const-ness of a pointer without accidentally
+ * changing the pointer type. This is necessary due to Clang's inability to use
+ * atomic_load on a const _Atomic variable.
+ */
+#define CONST_CAST(T, V) __extension__({ \
+ const T _tmp = (V); \
+ (T)_tmp; \
+})
+#else
+#define CONST_CAST(T, V) ((T)(V))
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif