Add support for Microsoft __ptr32 keyword.
Patch by Chris Cudmore! llvm-svn: 138533
This commit is contained in:
parent
4ba0ba42e2
commit
f2fb411d4a
@ -466,6 +466,7 @@ ALIAS("__volatile__" , volatile , KEYALL)
|
||||
|
||||
// Microsoft extensions which should be disabled in strict conformance mode
|
||||
KEYWORD(__ptr64 , KEYMS)
|
||||
KEYWORD(__ptr32 , KEYMS)
|
||||
KEYWORD(__w64 , KEYMS)
|
||||
KEYWORD(__uuidof , KEYMS | KEYBORLAND)
|
||||
KEYWORD(__try , KEYMS | KEYBORLAND)
|
||||
|
||||
@ -303,10 +303,12 @@ void Parser::ParseMicrosoftTypeAttributes(ParsedAttributes &attrs) {
|
||||
while (Tok.is(tok::kw___fastcall) || Tok.is(tok::kw___stdcall) ||
|
||||
Tok.is(tok::kw___thiscall) || Tok.is(tok::kw___cdecl) ||
|
||||
Tok.is(tok::kw___ptr64) || Tok.is(tok::kw___w64) ||
|
||||
Tok.is(tok::kw___ptr32) ||
|
||||
Tok.is(tok::kw___unaligned)) {
|
||||
IdentifierInfo *AttrName = Tok.getIdentifierInfo();
|
||||
SourceLocation AttrNameLoc = ConsumeToken();
|
||||
if (Tok.is(tok::kw___ptr64) || Tok.is(tok::kw___w64))
|
||||
if (Tok.is(tok::kw___ptr64) || Tok.is(tok::kw___w64) ||
|
||||
Tok.is(tok::kw___ptr32))
|
||||
// FIXME: Support these properly!
|
||||
continue;
|
||||
attrs.addNew(AttrName, AttrNameLoc, 0, AttrNameLoc, 0,
|
||||
@ -1722,6 +1724,7 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
|
||||
break;
|
||||
|
||||
case tok::kw___ptr64:
|
||||
case tok::kw___ptr32:
|
||||
case tok::kw___w64:
|
||||
case tok::kw___cdecl:
|
||||
case tok::kw___stdcall:
|
||||
@ -2271,6 +2274,7 @@ bool Parser::ParseOptionalTypeSpecifier(DeclSpec &DS, bool& isInvalid,
|
||||
break;
|
||||
|
||||
case tok::kw___ptr64:
|
||||
case tok::kw___ptr32:
|
||||
case tok::kw___w64:
|
||||
case tok::kw___cdecl:
|
||||
case tok::kw___stdcall:
|
||||
@ -2985,6 +2989,7 @@ bool Parser::isTypeSpecifierQualifier() {
|
||||
case tok::kw___thiscall:
|
||||
case tok::kw___w64:
|
||||
case tok::kw___ptr64:
|
||||
case tok::kw___ptr32:
|
||||
case tok::kw___pascal:
|
||||
case tok::kw___unaligned:
|
||||
|
||||
@ -3132,6 +3137,7 @@ bool Parser::isDeclarationSpecifier(bool DisambiguatingWithExpression) {
|
||||
case tok::kw___thiscall:
|
||||
case tok::kw___w64:
|
||||
case tok::kw___ptr64:
|
||||
case tok::kw___ptr32:
|
||||
case tok::kw___forceinline:
|
||||
case tok::kw___pascal:
|
||||
case tok::kw___unaligned:
|
||||
@ -3266,6 +3272,7 @@ void Parser::ParseTypeQualifierListOpt(DeclSpec &DS,
|
||||
|
||||
case tok::kw___w64:
|
||||
case tok::kw___ptr64:
|
||||
case tok::kw___ptr32:
|
||||
case tok::kw___cdecl:
|
||||
case tok::kw___stdcall:
|
||||
case tok::kw___fastcall:
|
||||
@ -3684,7 +3691,7 @@ void Parser::ParseParenDeclarator(Declarator &D) {
|
||||
if (Tok.is(tok::kw___cdecl) || Tok.is(tok::kw___stdcall) ||
|
||||
Tok.is(tok::kw___thiscall) || Tok.is(tok::kw___fastcall) ||
|
||||
Tok.is(tok::kw___w64) || Tok.is(tok::kw___ptr64) ||
|
||||
Tok.is(tok::kw___unaligned)) {
|
||||
Tok.is(tok::kw___ptr32) || Tok.is(tok::kw___unaligned)) {
|
||||
ParseMicrosoftTypeAttributes(attrs);
|
||||
}
|
||||
// Eat any Borland extensions.
|
||||
|
||||
@ -904,6 +904,7 @@ Parser::TPResult Parser::isCXXDeclarationSpecifier() {
|
||||
case tok::kw___thiscall:
|
||||
case tok::kw___w64:
|
||||
case tok::kw___ptr64:
|
||||
case tok::kw___ptr32:
|
||||
case tok::kw___forceinline:
|
||||
case tok::kw___unaligned:
|
||||
return TPResult::True();
|
||||
|
||||
@ -8,10 +8,16 @@ extern __declspec(dllimport) void __stdcall VarR4FromDec();
|
||||
__declspec(deprecated) __declspec(deprecated) char * __cdecl ltoa( long _Val, char * _DstBuf, int _Radix);
|
||||
__declspec(noalias) __declspec(restrict) void * __cdecl xxx( void * _Memory );
|
||||
typedef __w64 unsigned long ULONG_PTR, *PULONG_PTR;
|
||||
|
||||
void * __ptr64 PtrToPtr64(const void *p)
|
||||
{
|
||||
return((void * __ptr64) (unsigned __int64) (ULONG_PTR)p );
|
||||
}
|
||||
void * __ptr32 PtrToPtr32(const void *p)
|
||||
{
|
||||
return((void * __ptr32) (unsigned __int32) (ULONG_PTR)p );
|
||||
}
|
||||
|
||||
void __forceinline InterlockedBitTestAndSet (long *Base, long Bit)
|
||||
{
|
||||
__asm {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user