mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Fix for atomic aliasing in Clang or GCC builds
This commit is contained in:
@@ -148,10 +148,15 @@ public:
|
|||||||
volatile Type value;
|
volatile Type value;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static inline Type castFrom32Bit (int32 value) noexcept { return *(Type*) &value; }
|
#if BEAST_CLANG || __GNUC__ >= 4
|
||||||
static inline Type castFrom64Bit (int64 value) noexcept { return *(Type*) &value; }
|
#define BEAST_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__))
|
||||||
static inline int32 castTo32Bit (Type value) noexcept { return *(int32*) &value; }
|
#else
|
||||||
static inline int64 castTo64Bit (Type value) noexcept { return *(int64*) &value; }
|
#define BEAST_ATTRIBUTE_MAY_ALIAS
|
||||||
|
#endif
|
||||||
|
static inline Type castFrom32Bit (int32 value) noexcept { Type * BEAST_ATTRIBUTE_MAY_ALIAS tmp = (Type*)&value; return *tmp; }
|
||||||
|
static inline Type castFrom64Bit (int64 value) noexcept { Type * BEAST_ATTRIBUTE_MAY_ALIAS tmp = (Type*)&value; return *tmp; }
|
||||||
|
static inline int32 castTo32Bit (Type value) noexcept { int32 * BEAST_ATTRIBUTE_MAY_ALIAS tmp = (int32*)&value; return *tmp; }
|
||||||
|
static inline int64 castTo64Bit (Type value) noexcept { int64 * BEAST_ATTRIBUTE_MAY_ALIAS tmp = (int64*)&value; return *tmp; }
|
||||||
|
|
||||||
Type operator++ (int); // better to just use pre-increment with atomics..
|
Type operator++ (int); // better to just use pre-increment with atomics..
|
||||||
Type operator-- (int);
|
Type operator-- (int);
|
||||||
|
|||||||
Reference in New Issue
Block a user