aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2018-01-11 10:03:26 -0800
committerChris Robinson <[email protected]>2018-01-11 10:03:26 -0800
commite89c183231d26770f4c8ae80a8d05063c34cf0c9 (patch)
tree4e0afc97391f196e74361a3f72d757986a580636 /common
parentca9e6a4f9434ca25f821802d1b6e1363b18d7b81 (diff)
Avoid including alMain.h in ringbuffer.c
Diffstat (limited to 'common')
-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