[libclc] r247661 - integer: Update integer limits to comply with spec

Aaron Watry via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 14 20:56:21 PDT 2015


Author: awatry
Date: Mon Sep 14 22:56:21 2015
New Revision: 247661

URL: http://llvm.org/viewvc/llvm-project?rev=247661&view=rev
Log:
integer: Update integer limits to comply with spec

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/int minimums so that the compiler
actually treats them as shorts/chars. Without those casts, they
actually end up stored as integers, and the compiler may end up storing
the INT_MIN as a long.

The compiler can sign extend the values if it needs to convert the
char->short, short->int, or int->long

v2: Add explicit cast for INT_MIN and fix some type-o's and wrapping
    in the commit message.

Reported-by: Moritz Pflanzer <moritz.pflanzer14 at imperial.ac.uk>
CC: Moritz Pflanzer <moritz.pflanzer14 at imperial.ac.uk>
Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
Signed-off-by: Aaron Watry <awatry at gmail.com>

Modified:
    libclc/trunk/generic/include/clc/integer/definitions.h

Modified: libclc/trunk/generic/include/clc/integer/definitions.h
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/integer/definitions.h?rev=247661&r1=247660&r2=247661&view=diff
==============================================================================
--- libclc/trunk/generic/include/clc/integer/definitions.h (original)
+++ libclc/trunk/generic/include/clc/integer/definitions.h Mon Sep 14 22:56:21 2015
@@ -1,14 +1,14 @@
 #define CHAR_BIT 8
 #define INT_MAX 2147483647
-#define INT_MIN -2147483648
+#define INT_MIN ((int)(-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




More information about the cfe-commits mailing list