[Libclc-dev] [PATCH] integer: Update integer limits to comply with spec
Aaron Watry via Libclc-dev
libclc-dev at lists.llvm.org
Thu Sep 10 08:14:34 PDT 2015
The values for the char/short/integer/long minimums were declared with their actual values, not the definitions from the CL spec (v1.1). As a result, (-2147483648) was actually being treated as a long by the compiler, not an int, which caused issues when trying to add/subtract that value from a vector.
Update the definitions to use the values declared by the spec, and also add explicit casts for the char/short minimums so that the compiler actually treats them as shorts/chars. Without those casts, they actually end up stored as integers.
The compiler can sign extend the values if it needs to conver the char->short or short->int.
Reported-by: Moritz Pflanzer <moritz.pflanzer14 at imperial.ac.uk>
CC: Moritz Pflanzer <moritz.pflanzer14 at imperial.ac.uk>
Signed-off-by: Aaron Watry <awatry at gmail.com>
---
generic/include/clc/integer/definitions.h | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/generic/include/clc/integer/definitions.h b/generic/include/clc/integer/definitions.h
index a407974..505002f 100644
--- a/generic/include/clc/integer/definitions.h
+++ b/generic/include/clc/integer/definitions.h
@@ -1,14 +1,14 @@
#define CHAR_BIT 8
#define INT_MAX 2147483647
-#define INT_MIN -2147483648
+#define INT_MIN (-2147483647 - 1)
#define LONG_MAX 0x7fffffffffffffffL
-#define LONG_MIN -0x8000000000000000L
+#define LONG_MIN (-0x7fffffffffffffffL - 1)
+#define CHAR_MAX SCHAR_MAX
+#define CHAR_MIN SCHAR_MIN
#define SCHAR_MAX 127
-#define SCHAR_MIN -128
-#define CHAR_MAX 127
-#define CHAR_MIN -128
+#define SCHAR_MIN ((char)(-127 - 1))
#define SHRT_MAX 32767
-#define SHRT_MIN -32768
+#define SHRT_MIN ((short)(-32767 - 1))
#define UCHAR_MAX 255
#define USHRT_MAX 65535
#define UINT_MAX 0xffffffff
--
2.1.4
More information about the Libclc-dev
mailing list