<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Jul 26, 2015 at 2:02 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: majnemer<br>
Date: Sun Jul 26 04:02:26 2015<br>
New Revision: 243243<br>
<br>
URL: <a href="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=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=243243&view=rev</a><br>
Log:<br>
[MS Extensions] Remove support for the i128 integer literal suffix<br>
<br>
There is currently no support in MSVC for using i128 as an integer<br>
literal suffix.  In fact, there appears to be no evidence that they have<br>
ever supported this feature in any of their compilers.  This was an over<br>
generalization of their actual feature and is a nasty source of bugs.<br>
Why is it a source of bugs?  Because most code in clang expects that<br>
evaluation of an integer constant expression won't give them something<br>
that 'long long' can't represent.  Instead of providing a meaningful<br>
feature, i128 gives us cute ways of exploding the compiler.<br></blockquote><div><br></div><div><a href="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=">https://msdn.microsoft.com/en-us/library/cc953fe1.aspx</a> claims otherwise.<br></div><div><br>Under Microsoft Specific types:</div><table style="border-collapse:collapse;margin-bottom:20px;margin-top:20px;padding:0px;width:940px;border:1px solid rgb(187,187,187);color:rgb(0,0,0);font-family:'Segoe UI','Lucida Grande',Verdana,Arial,Helvetica,sans-serif;font-size:13px;line-height:17.5499992370605px"><tbody><tr><td style="padding:10px 8px;color:rgb(42,42,42);vertical-align:top;border:1px solid rgb(187,187,187)"><p style="margin-top:0px;margin-bottom:0px;padding-bottom:0px;line-height:18px"><strong>__int</strong> <em>n</em></p></td><td style="padding:10px 8px;color:rgb(42,42,42);vertical-align:top;border:1px solid rgb(187,187,187)"><p style="margin-top:0px;margin-bottom:0px;padding-bottom:0px;line-height:18px">8, 16, 32, 64, or 128 bits depending on the value of <em>n</em><strong>. __int</strong><em>n</em> is Microsoft-specific.</p></td></tr></tbody></table><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Modified:<br>
    cfe/trunk/lib/Lex/LiteralSupport.cpp<br>
    cfe/trunk/lib/Sema/SemaExpr.cpp<br>
    cfe/trunk/test/Lexer/ms-extensions.c<br>
    cfe/trunk/test/Sema/128bitint.c<br>
    cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp<br>
<br>
Modified: cfe/trunk/lib/Lex/LiteralSupport.cpp<br>
URL: <a href="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=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/LiteralSupport.cpp?rev=243243&r1=243242&r2=243243&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Lex/LiteralSupport.cpp (original)<br>
+++ cfe/trunk/lib/Lex/LiteralSupport.cpp Sun Jul 26 04:02:26 2015<br>
@@ -613,7 +613,7 @@ NumericLiteralParser::NumericLiteralPars<br>
           break;<br>
<br>
         if (!isFPConstant) {<br>
-          // Allow i8, i16, i32, i64, and i128.<br>
+          // Allow i8, i16, i32, and i64.<br>
           switch (s[1]) {<br>
           case '8':<br>
             s += 2; // i8 suffix<br>
@@ -623,9 +623,6 @@ NumericLiteralParser::NumericLiteralPars<br>
             if (s[2] == '6') {<br>
               s += 3; // i16 suffix<br>
               MicrosoftInteger = 16;<br>
-            } else if (s[2] == '2' && s[3] == '8') {<br>
-              s += 4; // i128 suffix<br>
-              MicrosoftInteger = 128;<br>
             }<br>
             break;<br>
           case '3':<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>
URL: <a href="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=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=243243&r1=243242&r2=243243&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Sun Jul 26 04:02:26 2015<br>
@@ -3355,13 +3355,6 @@ ExprResult Sema::ActOnNumericConstant(co<br>
<br>
     // Get the value in the widest-possible width.<br>
     unsigned MaxWidth = Context.getTargetInfo().getIntMaxTWidth();<br>
-    // The microsoft literal suffix extensions support 128-bit literals, which<br>
-    // may be wider than [u]intmax_t.<br>
-    // FIXME: Actually, they don't. We seem to have accidentally invented the<br>
-    //        i128 suffix.<br>
-    if (Literal.MicrosoftInteger == 128 && MaxWidth < 128 &&<br>
-        Context.getTargetInfo().hasInt128Type())<br>
-      MaxWidth = 128;<br>
     llvm::APInt ResultVal(MaxWidth, 0);<br>
<br>
     if (Literal.GetIntegerValue(ResultVal)) {<br>
@@ -3384,12 +3377,7 @@ ExprResult Sema::ActOnNumericConstant(co<br>
<br>
       // Microsoft specific integer suffixes are explicitly sized.<br>
       if (Literal.MicrosoftInteger) {<br>
-        if (Literal.MicrosoftInteger > MaxWidth) {<br>
-          // If this target doesn't support __int128, error and force to ull.<br>
-          Diag(Tok.getLocation(), diag::err_int128_unsupported);<br>
-          Width = MaxWidth;<br>
-          Ty = Context.getIntMaxType();<br>
-        } else if (Literal.MicrosoftInteger == 8 && !Literal.isUnsigned) {<br>
+        if (Literal.MicrosoftInteger == 8 && !Literal.isUnsigned) {<br>
           Width = 8;<br>
           Ty = Context.CharTy;<br>
         } else {<br>
<br>
Modified: cfe/trunk/test/Lexer/ms-extensions.c<br>
URL: <a href="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=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/ms-extensions.c?rev=243243&r1=243242&r2=243243&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Lexer/ms-extensions.c (original)<br>
+++ cfe/trunk/test/Lexer/ms-extensions.c Sun Jul 26 04:02:26 2015<br>
@@ -7,10 +7,6 @@ __int16 x2 = 4i16;<br>
 __int32 x3 = 5i32;<br>
 __int64 x5 = 0x42i64;<br>
 __int64 x6 = 0x42I64;<br>
-#ifndef __SIZEOF_INT128__<br>
-// expected-error@+2 {{__int128 is not supported on this target}}<br>
-#endif<br>
-__int64 x4 = 70000000i128;<br>
<br>
 __int64 y = 0x42i64u;  // expected-error {{invalid suffix}}<br>
 __int64 w = 0x43ui64;<br>
<br>
Modified: cfe/trunk/test/Sema/128bitint.c<br>
URL: <a href="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=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/128bitint.c?rev=243243&r1=243242&r2=243243&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Sema/128bitint.c (original)<br>
+++ cfe/trunk/test/Sema/128bitint.c Sun Jul 26 04:02:26 2015<br>
@@ -1,5 +1,5 @@<br>
-// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin9 -fms-extensions %s -DHAVE<br>
-// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-linux-gnu -fms-extensions %s -DHAVE_NOT<br>
+// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin9 %s -DHAVE<br>
+// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-linux-gnu %s -DHAVE_NOT<br>
<br>
 #ifdef HAVE<br>
 typedef int i128 __attribute__((__mode__(TI)));<br>
@@ -17,28 +17,14 @@ __int128 i = (__int128)0;<br>
 unsigned __int128 u = (unsigned __int128)-1;<br>
<br>
 long long SignedTooBig = 123456789012345678901234567890; // expected-error {{integer literal is too large to be represented in any integer type}}<br>
-__int128_t Signed128 = 123456789012345678901234567890i128;<br>
-long long Signed64 = 123456789012345678901234567890i128; // expected-warning {{implicit conversion from '__int128' to 'long long' changes value from 123456789012345678901234567890 to -4362896299872285998}}<br>
 unsigned long long UnsignedTooBig = 123456789012345678901234567890; // expected-error {{integer literal is too large to be represented in any integer type}}<br>
-__uint128_t Unsigned128 = 123456789012345678901234567890Ui128;<br>
-unsigned long long Unsigned64 = 123456789012345678901234567890Ui128; // expected-warning {{implicit conversion from 'unsigned __int128' to 'unsigned long long' changes value from 123456789012345678901234567890 to 14083847773837265618}}<br>
-<br>
-// Ensure we don't crash when user passes 128-bit values to type safety<br>
-// attributes.<br>
-void pointer_with_type_tag_arg_num_1(void *buf, int datatype)<br>
-    __attribute__(( pointer_with_type_tag(mpi,0x10000000000000001i128,1) )); // expected-error {{attribute parameter 2 is out of bounds}}<br>
-<br>
-void pointer_with_type_tag_arg_num_2(void *buf, int datatype)<br>
-    __attribute__(( pointer_with_type_tag(mpi,1,0x10000000000000001i128) )); // expected-error {{attribute parameter 3 is out of bounds}}<br>
<br>
 void MPI_Send(void *buf, int datatype) __attribute__(( pointer_with_type_tag(mpi,1,2) ));<br>
<br>
-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}}<br>
 static const int mpi_int __attribute__(( type_tag_for_datatype(mpi,int) )) = 10;<br>
<br>
 void test(int *buf)<br>
 {<br>
-  MPI_Send(buf, 0x10000000000000001i128); // expected-warning {{implicit conversion from '__int128' to 'int' changes value}}<br>
 }<br>
 #else<br>
<br>
<br>
Modified: cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp<br>
URL: <a href="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=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp?rev=243243&r1=243242&r2=243243&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/ms_integer_suffix.cpp Sun Jul 26 04:02:26 2015<br>
@@ -18,6 +18,3 @@ static_assert(sizeof(0i32) == __SIZEOF_I<br>
 #ifdef __SIZEOF_INT64__<br>
 static_assert(sizeof(0i64) == __SIZEOF_INT64__, "");<br>
 #endif<br>
-#ifdef __SIZEOF_INT128__<br>
-static_assert(sizeof(0i128) == __SIZEOF_INT128__, "");<br>
-#endif<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org</div>
</div></div>