forked from OSchip/llvm-project
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. llvm-svn: 130369
This commit is contained in:
parent
b5fabb2f9f
commit
84133e41be
|
@ -450,6 +450,10 @@ KEYWORD(__try , KEYMS | KEYBORLAND)
|
|||
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)
|
||||
ALIAS("_asm" , asm , KEYMS)
|
||||
ALIAS("_cdecl" , __cdecl , KEYMS | KEYBORLAND)
|
||||
ALIAS("_fastcall" , __fastcall , KEYMS | KEYBORLAND)
|
||||
|
|
|
@ -335,12 +335,6 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
|
|||
}
|
||||
|
||||
if (LangOpts.Microsoft) {
|
||||
// Filter out some microsoft extensions when trying to parse in ms-compat
|
||||
// mode.
|
||||
Builder.defineMacro("__int8", "__INT8_TYPE__");
|
||||
Builder.defineMacro("__int16", "__INT16_TYPE__");
|
||||
Builder.defineMacro("__int32", "__INT32_TYPE__");
|
||||
Builder.defineMacro("__int64", "__INT64_TYPE__");
|
||||
// Both __PRETTY_FUNCTION__ and __FUNCTION__ are GCC extensions, however
|
||||
// VC++ appears to only like __FUNCTION__.
|
||||
Builder.defineMacro("__PRETTY_FUNCTION__", "__FUNCTION__");
|
||||
|
|
|
@ -171,6 +171,7 @@ void Parser::ParseGNUAttributes(ParsedAttributes &attrs,
|
|||
case tok::kw_short:
|
||||
case tok::kw_int:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw_float:
|
||||
|
@ -1688,6 +1689,10 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
|
|||
isInvalid = DS.SetTypeSpecWidth(DeclSpec::TSW_longlong, Loc, PrevSpec,
|
||||
DiagID);
|
||||
break;
|
||||
case tok::kw___int64:
|
||||
isInvalid = DS.SetTypeSpecWidth(DeclSpec::TSW_longlong, Loc, PrevSpec,
|
||||
DiagID);
|
||||
break;
|
||||
case tok::kw_signed:
|
||||
isInvalid = DS.SetTypeSpecSign(DeclSpec::TSS_signed, Loc, PrevSpec,
|
||||
DiagID);
|
||||
|
@ -1986,6 +1991,10 @@ bool Parser::ParseOptionalTypeSpecifier(DeclSpec &DS, bool& isInvalid,
|
|||
isInvalid = DS.SetTypeSpecWidth(DeclSpec::TSW_longlong, Loc, PrevSpec,
|
||||
DiagID);
|
||||
break;
|
||||
case tok::kw___int64:
|
||||
isInvalid = DS.SetTypeSpecWidth(DeclSpec::TSW_longlong, Loc, PrevSpec,
|
||||
DiagID);
|
||||
break;
|
||||
case tok::kw_signed:
|
||||
isInvalid = DS.SetTypeSpecSign(DeclSpec::TSS_signed, Loc, PrevSpec, DiagID);
|
||||
break;
|
||||
|
@ -2704,6 +2713,7 @@ bool Parser::isKnownToBeTypeSpecifier(const Token &Tok) const {
|
|||
// type-specifiers
|
||||
case tok::kw_short:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw__Complex:
|
||||
|
@ -2772,6 +2782,7 @@ bool Parser::isTypeSpecifierQualifier() {
|
|||
// type-specifiers
|
||||
case tok::kw_short:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw__Complex:
|
||||
|
@ -2895,6 +2906,7 @@ bool Parser::isDeclarationSpecifier(bool DisambiguatingWithExpression) {
|
|||
// type-specifiers
|
||||
case tok::kw_short:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw__Complex:
|
||||
|
|
|
@ -903,6 +903,7 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
case tok::kw_short:
|
||||
case tok::kw_int:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw_float:
|
||||
|
|
|
@ -945,6 +945,7 @@ bool Parser::isCXXSimpleTypeSpecifier() const {
|
|||
case tok::annot_typename:
|
||||
case tok::kw_short:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw_void:
|
||||
|
@ -1036,6 +1037,9 @@ void Parser::ParseCXXSimpleTypeSpecifier(DeclSpec &DS) {
|
|||
case tok::kw_long:
|
||||
DS.SetTypeSpecWidth(DeclSpec::TSW_long, Loc, PrevSpec, DiagID);
|
||||
break;
|
||||
case tok::kw___int64:
|
||||
DS.SetTypeSpecWidth(DeclSpec::TSW_longlong, Loc, PrevSpec, DiagID);
|
||||
break;
|
||||
case tok::kw_signed:
|
||||
DS.SetTypeSpecSign(DeclSpec::TSS_signed, Loc, PrevSpec, DiagID);
|
||||
break;
|
||||
|
|
|
@ -676,6 +676,7 @@ Parser::isExpressionOrTypeSpecifierSimple(tok::TokenKind Kind) {
|
|||
case tok::kw_float:
|
||||
case tok::kw_int:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_restrict:
|
||||
case tok::kw_short:
|
||||
case tok::kw_signed:
|
||||
|
@ -971,6 +972,7 @@ Parser::TPResult Parser::isCXXDeclarationSpecifier() {
|
|||
case tok::kw_short:
|
||||
case tok::kw_int:
|
||||
case tok::kw_long:
|
||||
case tok::kw___int64:
|
||||
case tok::kw_signed:
|
||||
case tok::kw_unsigned:
|
||||
case tok::kw_float:
|
||||
|
|
|
@ -151,4 +151,6 @@ __interface MicrosoftInterface;
|
|||
__interface MicrosoftInterface {
|
||||
virtual void foo1() = 0;
|
||||
virtual void foo2() = 0;
|
||||
};
|
||||
};
|
||||
|
||||
__int64 x7 = __int64(0);
|
||||
|
|
|
@ -80,10 +80,6 @@
|
|||
//
|
||||
// MSEXT-NOT:#define __STDC__
|
||||
// MSEXT:#define _INTEGRAL_MAX_BITS 64
|
||||
// MSEXT:#define __int16 __INT16_TYPE__
|
||||
// MSEXT:#define __int32 __INT32_TYPE__
|
||||
// MSEXT:#define __int64 __INT64_TYPE__
|
||||
// MSEXT:#define __int8 __INT8_TYPE__
|
||||
//
|
||||
//
|
||||
// RUN: %clang_cc1 -x objective-c -E -dM < /dev/null | FileCheck -check-prefix OBJC %s
|
||||
|
|
Loading…
Reference in New Issue