[cfe-commits] [Patch] PR11179 - Update StmtPrinter to not complain on some IntegerLiteral types
Abramo Bagnara
abramo.bagnara at gmail.com
Wed Nov 2 15:51:37 PDT 2011
Il 02/11/2011 03:21, Richard Trieu ha scritto:
> On Mon, Oct 24, 2011 at 7:30 AM, Douglas Gregor <dgregor at apple.com
> <mailto:dgregor at apple.com>> wrote:
>
>
> On Oct 20, 2011, at 5:36 PM, Chandler Carruth wrote:
>
>> On Thu, Oct 20, 2011 at 5:12 PM, Richard Trieu <rtrieu at google.com
>> <mailto:rtrieu at google.com>> wrote:
>>
>> Should Clang be printing suffixes that are accepted only with
>> certain flags?
>>
>>
>> I think this is an interesting policy decision. I'd love to hear
>> Doug's thoughts on it.
>>
>> It seems fine to me for Clang, when running with -fms-extensions,
>> to suggest fixes even if only valid for -fms-extensions. Clearly
>> if there is a generic suggestion that could be made, that would be
>> a preferred alternative. For example, '__asm__' should be
>> suggested before 'asm'.
>
> I think it's fine for Clang to print suffixes that are only accepted
> with certain flags. Presumably, you should never get an
> IntegerLiteral of type __int128_t unless you're in a dialect that
> supports parsing it.
>
> … except that we cheat when we're building template arguments,
> because it was convenient. That cheating could be eliminated by
> encoding integer literal values directly within
> SubstNonTypeTemplateParmExpr.
>
> - Doug
>
>
> New patch. Changes as follows:
> Add int128 and uint128 suffixes (i128 and Ui128) to StmtPrinter. short
> and unsigned short will get to llvm_unreachable
> Add assert to IntergerLiteral to prevent creation with type short or
> unsigned short
> Fix comment in IntegerLiteral to say that int128 and uint128 are
> acceptable types
> Change BuildExpressFromIntegralTemplateArgument to give a proper Expr.
> For negative numbers, use UnaryOperator of IntegerLiteral. For short
> and unsigned short, ImplicitCastExpr from int.
Following this path have you considered how to represent an int
parameter with value INT_MIN?
I think there is no way you can represent it in standard conformant way
except to use -INT_MAX - 1 (i.e. -2147483647 - 1 if int has 32 bits).
You cannot use -214783648 because no integer literal of type int with
value 214783648 can exists.
More information about the cfe-commits
mailing list