[cfe-dev] MS 128-bit literals don't always have the correct type

João Matos ripzonetriton at gmail.com
Sun Sep 23 12:48:40 PDT 2012


I've never heard of this extension before. I tried to compile a simple
example:

int main()
{
auto i = 1i128;
 return 0;
}


>cl -nologo test.cpp
test.cpp
test.cpp(3) : error C2059: syntax error : 'bad suffix on number'
test.cpp(3) : error C2146: syntax error : missing ';' before identifier
'i128'
test.cpp(3) : error C2065: 'i128' : undeclared identifier

I also couldn't find any mention of these literals in MSDN.

On Sun, Sep 23, 2012 at 8:18 PM, Dmitri Gribenko <gribozavr at gmail.com>wrote:

> On Sun, Sep 23, 2012 at 10:15 PM, Aaron Ballman <aaron at aaronballman.com>
> wrote:
> > On Sun, Sep 23, 2012 at 2:27 PM, Dmitri Gribenko <gribozavr at gmail.com>
> wrote:
> >> On Sun, Sep 23, 2012 at 9:24 PM, Cory Nelson <phrosty at gmail.com> wrote:
> >>> On Sun, Sep 23, 2012 at 11:20 AM, Dmitri Gribenko <gribozavr at gmail.com>
> wrote:
> >>>> Hello,
> >>>>
> >>>> Currently Clang chooses the type of MS 128-bit literals (<digits>i128,
> >>>> <digits>ui128) based on their value, as if there was no suffix, but
> >>>> also allows an extended 128-bit type.
> >>>>
> >>>> For example, on x86_64:
> >>>>
> >>>> 1i128 is equivalent to 1,
> >>>> 0x100000000i128 is same as 0x100000000L,
> >>>> and finally 0x10000000000000000i128 is indeed a 128-bit literal.
> >>>>
> >>>> I don't know if it is intended, but i128 is definitely treated
> >>>> differently way from other MS literal suffixes we accept (for example,
> >>>> i64 is essentially an alias for LL).
> >>>>
> >>>> I don't have Visual Studio so I can not check how it handles these
> literals.
> >>>
> >>> VC++ does not support 128-bit literals.
> >>
> >> I'm confused.  So why does Clang implement them?
> >
> > There's an __int128 supplied by gcc
> > (http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html), but there's
> > not one for Visual Studio (at least not one officially documented).
>
> That is a 128-bit integer type.  I was asking about 128-bit literals,
> like 1i128 (which gcc does not support).
>
> Dmitri
>
> --
> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>



-- 
João Matos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120923/7aa32853/attachment.html>


More information about the cfe-dev mailing list