[cfe-commits] r130369 - in /cfe/trunk: include/clang/Basic/TokenKinds.def lib/Frontend/InitPreprocessor.cpp lib/Parse/ParseDecl.cpp lib/Parse/ParseExpr.cpp lib/Parse/ParseExprCXX.cpp lib/Parse/ParseTentative.cpp test/Parser/MicrosoftExtensions.cpp test/Preprocessor/init.c

Abramo Bagnara abramo.bagnara at gmail.com
Wed Apr 27 23:11:08 PDT 2011


Il 28/04/2011 03:59, Francois Pichet ha scritto:
> Author: fpichet
> Date: Wed Apr 27 20:59:37 2011
> New Revision: 130369
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=130369&view=rev
> Log:
> Upgrade Microsoft's __int8, __int16, __int32 and __int64 types from builtin defines to real types.
> 
> Otherwise statements like:
>   __int64 var = __int64(0);
> 
> would be expanded to:
>   long long var = long long(0);
> 
> and fail to compile.
> 
> Modified:
>     cfe/trunk/include/clang/Basic/TokenKinds.def
>     cfe/trunk/lib/Frontend/InitPreprocessor.cpp
>     cfe/trunk/lib/Parse/ParseDecl.cpp
>     cfe/trunk/lib/Parse/ParseExpr.cpp
>     cfe/trunk/lib/Parse/ParseExprCXX.cpp
>     cfe/trunk/lib/Parse/ParseTentative.cpp
>     cfe/trunk/test/Parser/MicrosoftExtensions.cpp
>     cfe/trunk/test/Preprocessor/init.c
> 
> Modified: cfe/trunk/include/clang/Basic/TokenKinds.def
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TokenKinds.def?rev=130369&r1=130368&r2=130369&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/TokenKinds.def (original)
> +++ cfe/trunk/include/clang/Basic/TokenKinds.def Wed Apr 27 20:59:37 2011
> @@ -450,6 +450,10 @@
>  KEYWORD(__except                  , KEYMS | KEYBORLAND)
>  KEYWORD(__finally                 , KEYMS | KEYBORLAND)
>  KEYWORD(__leave                   , KEYMS | KEYBORLAND)
> +KEYWORD(__int64                   , KEYMS)
> +ALIAS("__int8"       , char       , KEYMS)
> +ALIAS("__int16"      , short      , KEYMS)
> +ALIAS("__int32"      , int        , KEYMS)

IMO it is better to handle this as a target dependent typedef (just like
__builtin_va_list). This would fix also following problem reported by
Charles and name mangling issues:

> By the way, I just realized: the behavior of __int8 in clang is wrong
> currently. It should always be signed (unless specified otherwise with
> 'unsigned'), whereas right now it can be signed or unsigned depending on
> the -funsigned-char parameter, since it's an alias to 'char'.



More information about the cfe-commits mailing list