[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:18:09 PDT 2015


Note: I've sent some updated piglit tests to that list, which can be
reviewed here:
http://lists.freedesktop.org/archives/piglit/2015-September/017065.html

I verified that each of those individual tests failed with a compile error
before the changes in this patch were made, and then I fixed each error
individually with a retesting step between fixing each definition.

--Aaron

On Thu, Sep 10, 2015 at 10:14 AM, Aaron Watry <awatry at gmail.com> wrote:

> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20150910/0821d8a1/attachment.html>


More information about the Libclc-dev mailing list