[Libclc-dev] [PATCH] integer: Update integer limits to comply with spec

Aaron Watry via Libclc-dev libclc-dev at lists.llvm.org
Mon Sep 14 20:59:27 PDT 2015


On Mon, Sep 14, 2015 at 10:47 AM, Tom Stellard <tom at stellard.net> wrote:

> LGTM.
>

Thanks Tom.

Moritz, I've pushed this fix.  Feel free to pull/update if you haven't
already applied this (or an equivalent fix) locally.

--Aaron




> On Fri, Sep 11, 2015 at 07:31:17PM -0500, Aaron Watry via Libclc-dev 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/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>
> > CC: Tom Stellard <thomas.stellard at amd.com>
> > 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..89de232 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 ((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
> > --
> > 2.1.4
> >
> > _______________________________________________
> > Libclc-dev mailing list
> > Libclc-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20150914/543f30a0/attachment.html>


More information about the Libclc-dev mailing list