<p dir="ltr"><br>
On 22 Jul 2014 07:22, "Aaron Ballman" <<a href="mailto:aaron@aaronballman.com">aaron@aaronballman.com</a>> wrote:<br>
><br>
> Author: aaronballman<br>
> Date: Tue Jul 22 09:08:09 2014<br>
> New Revision: 213657<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=213657&view=rev">http://llvm.org/viewvc/llvm-project?rev=213657&view=rev</a><br>
> Log:<br>
> Provide extra information in the "integer constant is too large" diagnostic. This will be used to improve other diagnostics.<br>
><br>
> Modified:<br>
>     cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td<br>
>     cfe/trunk/lib/Lex/PPExpressions.cpp<br>
>     cfe/trunk/lib/Sema/SemaExpr.cpp<br>
>     cfe/trunk/test/CXX/lex/lex.literal/lex.ext/p3.cpp<br>
>     cfe/trunk/test/Lexer/constants.c<br>
>     cfe/trunk/test/Sema/128bitint.c<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td?rev=213657&r1=213656&r2=213657&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td?rev=213657&r1=213656&r2=213657&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td (original)<br>
> +++ cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td Tue Jul 22 09:08:09 2014<br>
> @@ -103,9 +103,9 @@ def warn_cxx98_compat_longlong : Warning<br>
>    "'long long' is incompatible with C++98">,<br>
>    InGroup<CXX98CompatPedantic>, DefaultIgnore;<br>
>  def err_integer_too_large : Error<<br>
> -  "integer constant is larger than the largest unsigned integer type">;<br>
> +  "integer constant is larger than the largest %0-bit unsigned integer type">;</p>
<p dir="ltr">The wording here could be better -- all 32-bit integer types are the same size, by definition.</p>
<p dir="ltr">Perhaps "integer constant evaluates to value %0 that cannot be represented as a %1-bit %select{signed|unsigned}2 integer"?</p>
<p dir="ltr">>  def ext_integer_too_large_for_signed : ExtWarn<<br>
> -  "integer constant is larger than the largest signed integer type">,<br>
> +  "integer constant is larger than the largest %0-bit signed integer type">,<br>
>    InGroup<DiagGroup<"implicitly-unsigned-literal">>;<br>
><br>
>  // Sema && AST<br>
><br>
> Modified: cfe/trunk/lib/Lex/PPExpressions.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPExpressions.cpp?rev=213657&r1=213656&r2=213657&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPExpressions.cpp?rev=213657&r1=213656&r2=213657&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Lex/PPExpressions.cpp (original)<br>
> +++ cfe/trunk/lib/Lex/PPExpressions.cpp Tue Jul 22 09:08:09 2014<br>
> @@ -244,7 +244,9 @@ static bool EvaluateValue(PPValue &Resul<br>
>      // Parse the integer literal into Result.<br>
>      if (Literal.GetIntegerValue(Result.Val)) {<br>
>        // Overflow parsing integer literal.<br>
> -      if (ValueLive) PP.Diag(PeekTok, diag::err_integer_too_large);<br>
> +      if (ValueLive)<br>
> +        PP.Diag(PeekTok, diag::err_integer_too_large)<br>
> +            << Result.Val.getBitWidth();<br>
>        Result.Val.setIsUnsigned(true);<br>
>      } else {<br>
>        // Set the signedness of the result to match whether there was a U suffix<br>
> @@ -259,7 +261,8 @@ static bool EvaluateValue(PPValue &Resul<br>
>          // Octal, hexadecimal, and binary literals are implicitly unsigned if<br>
>          // the value does not fit into a signed integer type.<br>
>          if (ValueLive && Literal.getRadix() == 10)<br>
> -          PP.Diag(PeekTok, diag::ext_integer_too_large_for_signed);<br>
> +          PP.Diag(PeekTok, diag::ext_integer_too_large_for_signed)<br>
> +              << Result.Val.getBitWidth();<br>
>          Result.Val.setIsUnsigned(true);<br>
>        }<br>
>      }<br>
><br>
> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=213657&r1=213656&r2=213657&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=213657&r1=213656&r2=213657&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>
> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Jul 22 09:08:09 2014<br>
> @@ -3117,7 +3117,8 @@ ExprResult Sema::ActOnNumericConstant(co<br>
>        } else {<br>
>          llvm::APInt ResultVal(Context.getTargetInfo().getLongLongWidth(), 0);<br>
>          if (Literal.GetIntegerValue(ResultVal))<br>
> -          Diag(Tok.getLocation(), diag::err_integer_too_large);<br>
> +          Diag(Tok.getLocation(), diag::err_integer_too_large)<br>
> +            << ResultVal.getBitWidth();<br>
>          Lit = IntegerLiteral::Create(Context, ResultVal, CookedTy,<br>
>                                       Tok.getLocation());<br>
>        }<br>
> @@ -3210,7 +3211,8 @@ ExprResult Sema::ActOnNumericConstant(co<br>
><br>
>      if (Literal.GetIntegerValue(ResultVal)) {<br>
>        // If this value didn't fit into uintmax_t, error and force to ull.<br>
> -      Diag(Tok.getLocation(), diag::err_integer_too_large);<br>
> +      Diag(Tok.getLocation(), diag::err_integer_too_large)<br>
> +          << ResultVal.getBitWidth();<br>
>        Ty = Context.UnsignedLongLongTy;<br>
>        assert(Context.getTypeSize(Ty) == ResultVal.getBitWidth() &&<br>
>               "long long is not intmax_t?");<br>
> @@ -3290,7 +3292,8 @@ ExprResult Sema::ActOnNumericConstant(co<br>
>        // If we still couldn't decide a type, we probably have something that<br>
>        // does not fit in a signed long long, but has no U suffix.<br>
>        if (Ty.isNull()) {<br>
> -        Diag(Tok.getLocation(), diag::ext_integer_too_large_for_signed);<br>
> +        Diag(Tok.getLocation(), diag::ext_integer_too_large_for_signed)<br>
> +            << ResultVal.getBitWidth();<br>
>          Ty = Context.UnsignedLongLongTy;<br>
>          Width = Context.getTargetInfo().getLongLongWidth();<br>
>        }<br>
><br>
> Modified: cfe/trunk/test/CXX/lex/lex.literal/lex.ext/p3.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/lex/lex.literal/lex.ext/p3.cpp?rev=213657&r1=213656&r2=213657&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/lex/lex.literal/lex.ext/p3.cpp?rev=213657&r1=213656&r2=213657&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/CXX/lex/lex.literal/lex.ext/p3.cpp (original)<br>
> +++ cfe/trunk/test/CXX/lex/lex.literal/lex.ext/p3.cpp Tue Jul 22 09:08:09 2014<br>
> @@ -9,7 +9,7 @@ int &i2 = 45_x1;<br>
>  template<char...> char &operator "" _x1 ();<br>
>  int &i3 = 0377_x1;<br>
><br>
> -int &i4 = 90000000000000000000000000000000000000000000000_x1; // expected-error {{integer constant is larger than the largest unsigned integer type}}<br>
> +int &i4 = 90000000000000000000000000000000000000000000000_x1; // expected-error {{integer constant is larger than the largest 64-bit unsigned integer type}}<br>
><br>
>  double &operator "" _x2 (const char *);<br>
>  double &i5 = 123123123123123123123123123123123123123123123_x2;<br>
><br>
> Modified: cfe/trunk/test/Lexer/constants.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/constants.c?rev=213657&r1=213656&r2=213657&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/constants.c?rev=213657&r1=213656&r2=213657&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/Lexer/constants.c (original)<br>
> +++ cfe/trunk/test/Lexer/constants.c Tue Jul 22 09:08:09 2014<br>
> @@ -15,9 +15,9 @@ float Y = 08.123456;<br>
>  #endif<br>
>  #if -01000000000000000000000  // should not warn.<br>
>  #endif<br>
> -#if 9223372036854775808 // expected-warning {{integer constant is larger than the largest signed integer type}}<br>
> +#if 9223372036854775808 // expected-warning {{integer constant is larger than the largest 64-bit signed integer type}}<br>
>  #endif<br>
> -#if 0x10000000000000000 // expected-error {{integer constant is larger than the largest unsigned integer type}}<br>
> +#if 0x10000000000000000 // expected-error {{integer constant is larger than the largest 64-bit unsigned integer type}}<br>
>  #endif<br>
><br>
>  int c[] = {<br>
><br>
> Modified: cfe/trunk/test/Sema/128bitint.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/128bitint.c?rev=213657&r1=213656&r2=213657&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/128bitint.c?rev=213657&r1=213656&r2=213657&view=diff</a><br>

> ==============================================================================<br>
> --- cfe/trunk/test/Sema/128bitint.c (original)<br>
> +++ cfe/trunk/test/Sema/128bitint.c Tue Jul 22 09:08:09 2014<br>
> @@ -16,10 +16,10 @@ __uint128_t b = (__uint128_t)-1;<br>
>  __int128 i = (__int128)0;<br>
>  unsigned __int128 u = (unsigned __int128)-1;<br>
><br>
> -long long SignedTooBig = 123456789012345678901234567890; // expected-error {{constant is larger than the largest unsigned integer type}}<br>
> +long long SignedTooBig = 123456789012345678901234567890; // expected-error {{integer constant is larger than the largest 64-bit unsigned 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 {{constant is larger than the largest unsigned integer type}}<br>
> +unsigned long long UnsignedTooBig = 123456789012345678901234567890; // expected-error {{integer constant is larger than the largest 64-bit unsigned 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>
><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">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</p>