r243243 - [MS Extensions] Remove support for the i128 integer literal suffix
Benjamin Kramer
benny.kra at gmail.com
Sun Jul 26 10:15:52 PDT 2015
On Sun, Jul 26, 2015 at 6:58 PM, Saleem Abdulrasool <compnerd at compnerd.org>
wrote:
> On Sun, Jul 26, 2015 at 2:02 AM, David Majnemer <david.majnemer at gmail.com>
> wrote:
>
>> Author: majnemer
>> Date: Sun Jul 26 04:02:26 2015
>> New Revision: 243243
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=243243&view=rev
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D243243-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Y_L85-cj_prla13CIMoO-QM0u4Ulpz--eZ5LnIr-TK8&s=vHK5_-kXeIViHSTsJSUo2hRP3egmioRNFU6ao1GMRU8&e=>
>> Log:
>> [MS Extensions] Remove support for the i128 integer literal suffix
>>
>> There is currently no support in MSVC for using i128 as an integer
>> literal suffix. In fact, there appears to be no evidence that they have
>> ever supported this feature in any of their compilers. This was an over
>> generalization of their actual feature and is a nasty source of bugs.
>> Why is it a source of bugs? Because most code in clang expects that
>> evaluation of an integer constant expression won't give them something
>> that 'long long' can't represent. Instead of providing a meaningful
>> feature, i128 gives us cute ways of exploding the compiler.
>>
>
> https://msdn.microsoft.com/en-us/library/cc953fe1.aspx
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__msdn.microsoft.com_en-2Dus_library_cc953fe1.aspx&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Y_L85-cj_prla13CIMoO-QM0u4Ulpz--eZ5LnIr-TK8&s=uZaMn5xiflWZHlTPmNHb4LrItXxuvCsIXWnYFWAsVyM&e=>
> claims otherwise.
>
> Under Microsoft Specific types:
>
> *__int* *n*
>
> 8, 16, 32, 64, or 128 bits depending on the value of *n**. __int**n* is
> Microsoft-specific.
>
>
__int128 as a type is fine (and supported), this commit removed support for
128 bit literals, e.g. __int128 x = 42i128;
- Ben
Modified:
>> cfe/trunk/lib/Lex/LiteralSupport.cpp
>> cfe/trunk/lib/Sema/SemaExpr.cpp
>> cfe/trunk/test/Lexer/ms-extensions.c
>> cfe/trunk/test/Sema/128bitint.c
>> cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp
>>
>> Modified: cfe/trunk/lib/Lex/LiteralSupport.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/LiteralSupport.cpp?rev=243243&r1=243242&r2=243243&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Lex_LiteralSupport.cpp-3Frev-3D243243-26r1-3D243242-26r2-3D243243-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Y_L85-cj_prla13CIMoO-QM0u4Ulpz--eZ5LnIr-TK8&s=cLoMbjQv7fJQ7G6QkMle-7L-PK3tAuvui9CzAKlwFGU&e=>
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/LiteralSupport.cpp (original)
>> +++ cfe/trunk/lib/Lex/LiteralSupport.cpp Sun Jul 26 04:02:26 2015
>> @@ -613,7 +613,7 @@ NumericLiteralParser::NumericLiteralPars
>> break;
>>
>> if (!isFPConstant) {
>> - // Allow i8, i16, i32, i64, and i128.
>> + // Allow i8, i16, i32, and i64.
>> switch (s[1]) {
>> case '8':
>> s += 2; // i8 suffix
>> @@ -623,9 +623,6 @@ NumericLiteralParser::NumericLiteralPars
>> if (s[2] == '6') {
>> s += 3; // i16 suffix
>> MicrosoftInteger = 16;
>> - } else if (s[2] == '2' && s[3] == '8') {
>> - s += 4; // i128 suffix
>> - MicrosoftInteger = 128;
>> }
>> break;
>> case '3':
>>
>> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=243243&r1=243242&r2=243243&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Sema_SemaExpr.cpp-3Frev-3D243243-26r1-3D243242-26r2-3D243243-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Y_L85-cj_prla13CIMoO-QM0u4Ulpz--eZ5LnIr-TK8&s=DBhkqfMKb5aW-Aq12GG-2hG_DGzfWt_RL0Sswla-MYI&e=>
>>
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Sun Jul 26 04:02:26 2015
>> @@ -3355,13 +3355,6 @@ ExprResult Sema::ActOnNumericConstant(co
>>
>> // Get the value in the widest-possible width.
>> unsigned MaxWidth = Context.getTargetInfo().getIntMaxTWidth();
>> - // The microsoft literal suffix extensions support 128-bit literals,
>> which
>> - // may be wider than [u]intmax_t.
>> - // FIXME: Actually, they don't. We seem to have accidentally
>> invented the
>> - // i128 suffix.
>> - if (Literal.MicrosoftInteger == 128 && MaxWidth < 128 &&
>> - Context.getTargetInfo().hasInt128Type())
>> - MaxWidth = 128;
>> llvm::APInt ResultVal(MaxWidth, 0);
>>
>> if (Literal.GetIntegerValue(ResultVal)) {
>> @@ -3384,12 +3377,7 @@ ExprResult Sema::ActOnNumericConstant(co
>>
>> // Microsoft specific integer suffixes are explicitly sized.
>> if (Literal.MicrosoftInteger) {
>> - if (Literal.MicrosoftInteger > MaxWidth) {
>> - // If this target doesn't support __int128, error and force to
>> ull.
>> - Diag(Tok.getLocation(), diag::err_int128_unsupported);
>> - Width = MaxWidth;
>> - Ty = Context.getIntMaxType();
>> - } else if (Literal.MicrosoftInteger == 8 && !Literal.isUnsigned)
>> {
>> + if (Literal.MicrosoftInteger == 8 && !Literal.isUnsigned) {
>> Width = 8;
>> Ty = Context.CharTy;
>> } else {
>>
>> Modified: cfe/trunk/test/Lexer/ms-extensions.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/ms-extensions.c?rev=243243&r1=243242&r2=243243&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_Lexer_ms-2Dextensions.c-3Frev-3D243243-26r1-3D243242-26r2-3D243243-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Y_L85-cj_prla13CIMoO-QM0u4Ulpz--eZ5LnIr-TK8&s=BTTdgPegnIDOdpdcppu_JmOXP2v7ze27LbwbckN1smo&e=>
>>
>> ==============================================================================
>> --- cfe/trunk/test/Lexer/ms-extensions.c (original)
>> +++ cfe/trunk/test/Lexer/ms-extensions.c Sun Jul 26 04:02:26 2015
>> @@ -7,10 +7,6 @@ __int16 x2 = 4i16;
>> __int32 x3 = 5i32;
>> __int64 x5 = 0x42i64;
>> __int64 x6 = 0x42I64;
>> -#ifndef __SIZEOF_INT128__
>> -// expected-error at +2 {{__int128 is not supported on this target}}
>> -#endif
>> -__int64 x4 = 70000000i128;
>>
>> __int64 y = 0x42i64u; // expected-error {{invalid suffix}}
>> __int64 w = 0x43ui64;
>>
>> Modified: cfe/trunk/test/Sema/128bitint.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/128bitint.c?rev=243243&r1=243242&r2=243243&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_Sema_128bitint.c-3Frev-3D243243-26r1-3D243242-26r2-3D243243-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Y_L85-cj_prla13CIMoO-QM0u4Ulpz--eZ5LnIr-TK8&s=5DccQKkoz5XvbVkhbNxt28VSnv3k_H_EHkAb0mSxWBM&e=>
>>
>>
>> ==============================================================================
>> --- cfe/trunk/test/Sema/128bitint.c (original)
>> +++ cfe/trunk/test/Sema/128bitint.c Sun Jul 26 04:02:26 2015
>> @@ -1,5 +1,5 @@
>> -// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin9
>> -fms-extensions %s -DHAVE
>> -// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-linux-gnu
>> -fms-extensions %s -DHAVE_NOT
>> +// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin9 %s
>> -DHAVE
>> +// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-linux-gnu %s
>> -DHAVE_NOT
>>
>> #ifdef HAVE
>> typedef int i128 __attribute__((__mode__(TI)));
>> @@ -17,28 +17,14 @@ __int128 i = (__int128)0;
>> unsigned __int128 u = (unsigned __int128)-1;
>>
>> long long SignedTooBig = 123456789012345678901234567890; //
>> expected-error {{integer literal is too large to be represented in any
>> integer type}}
>> -__int128_t Signed128 = 123456789012345678901234567890i128;
>> -long long Signed64 = 123456789012345678901234567890i128; //
>> expected-warning {{implicit conversion from '__int128' to 'long long'
>> changes value from 123456789012345678901234567890 to -4362896299872285998}}
>> unsigned long long UnsignedTooBig = 123456789012345678901234567890; //
>> expected-error {{integer literal is too large to be represented in any
>> integer type}}
>> -__uint128_t Unsigned128 = 123456789012345678901234567890Ui128;
>> -unsigned long long Unsigned64 = 123456789012345678901234567890Ui128; //
>> expected-warning {{implicit conversion from 'unsigned __int128' to
>> 'unsigned long long' changes value from 123456789012345678901234567890 to
>> 14083847773837265618}}
>> -
>> -// Ensure we don't crash when user passes 128-bit values to type safety
>> -// attributes.
>> -void pointer_with_type_tag_arg_num_1(void *buf, int datatype)
>> - __attribute__(( pointer_with_type_tag(mpi,0x10000000000000001i128,1)
>> )); // expected-error {{attribute parameter 2 is out of bounds}}
>> -
>> -void pointer_with_type_tag_arg_num_2(void *buf, int datatype)
>> - __attribute__(( pointer_with_type_tag(mpi,1,0x10000000000000001i128)
>> )); // expected-error {{attribute parameter 3 is out of bounds}}
>>
>> void MPI_Send(void *buf, int datatype) __attribute__((
>> pointer_with_type_tag(mpi,1,2) ));
>>
>> -static const __uint128_t mpi_int_wrong __attribute__((
>> type_tag_for_datatype(mpi,int) )) = 0x10000000000000001i128; //
>> expected-error {{'type_tag_for_datatype' attribute requires the initializer
>> to be an integer constant expression that can be represented by a 64 bit
>> integer}}
>> static const int mpi_int __attribute__(( type_tag_for_datatype(mpi,int)
>> )) = 10;
>>
>> void test(int *buf)
>> {
>> - MPI_Send(buf, 0x10000000000000001i128); // expected-warning {{implicit
>> conversion from '__int128' to 'int' changes value}}
>> }
>> #else
>>
>>
>> Modified: cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp?rev=243243&r1=243242&r2=243243&view=diff
>> <https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_SemaCXX_ms-5Finteger-5Fsuffix.cpp-3Frev-3D243243-26r1-3D243242-26r2-3D243243-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=Y_L85-cj_prla13CIMoO-QM0u4Ulpz--eZ5LnIr-TK8&s=nsDflFhecmQKxPWXfGpPRvOh2nO6o8TLWiuoib12kUo&e=>
>>
>> ==============================================================================
>> --- cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp (original)
>> +++ cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp Sun Jul 26 04:02:26 2015
>> @@ -18,6 +18,3 @@ static_assert(sizeof(0i32) == __SIZEOF_I
>> #ifdef __SIZEOF_INT64__
>> static_assert(sizeof(0i64) == __SIZEOF_INT64__, "");
>> #endif
>> -#ifdef __SIZEOF_INT128__
>> -static_assert(sizeof(0i128) == __SIZEOF_INT128__, "");
>> -#endif
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150726/e8a7dd12/attachment.html>
More information about the cfe-commits
mailing list