From 0d40488d2e28650fec75abdd1c4fcb62fea623da Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 14 Jun 2018 17:33:56 -0400 Subject: [PATCH] Issue #262 - Attempt to prevent undefined behavior --- include/cyclone/types.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/include/cyclone/types.h b/include/cyclone/types.h index 9ba6d289..ee04e832 100644 --- a/include/cyclone/types.h +++ b/include/cyclone/types.h @@ -493,12 +493,20 @@ typedef uint32_t char_type; /** * Convert from an object to an integer. */ -#define obj_obj2int(x) ((long)(x)>>1) +#ifdef __clang__ + #define obj_obj2int(n) (((long)((ulong)(n) & ~1))/(long)(1uL<<1)) +#else + #define obj_obj2int(x) ((long)(x)>>1) +#endif /** * Convert from an integer to an object. */ -#define obj_int2obj(c) ((void *)((((long)c)<<1) | 1)) +#ifdef __clang__ + #define obj_int2obj(n) ((void *) ((((long)(n))*(long)(1uL<<1)) | 1)) +#else + #define obj_int2obj(c) ((void *)((((long)c)<<1) | 1)) +#endif /** * Determine if the object is a char.