diff options
author | Francois Pichet <pichet2000@gmail.com> | 2011-08-25 00:36:46 +0000 |
---|---|---|
committer | Francois Pichet <pichet2000@gmail.com> | 2011-08-25 00:36:46 +0000 |
commit | 58fd97a6f4f7c909aeef46b501ab46f3d6eac671 (patch) | |
tree | 40ac07f7f5d2a1756946079524296f47d58d7022 | |
parent | d6334e1d96fa5636dd1476902dc08edbbc8f4409 (diff) |
Add support for Microsoft __ptr32 keyword.
Patch by Chris Cudmore!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138533 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/TokenKinds.def | 1 | ||||
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 11 | ||||
-rw-r--r-- | lib/Parse/ParseTentative.cpp | 1 | ||||
-rw-r--r-- | test/Parser/MicrosoftExtensions.c | 6 |
4 files changed, 17 insertions, 2 deletions
diff --git a/include/clang/Basic/TokenKinds.def b/include/clang/Basic/TokenKinds.def index 95bfca446a..e0b22b7b24 100644 --- a/include/clang/Basic/TokenKinds.def +++ b/include/clang/Basic/TokenKinds.def @@ -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) diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 2316590afe..9e2fb25947 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -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. diff --git a/lib/Parse/ParseTentative.cpp b/lib/Parse/ParseTentative.cpp index e354f57b70..f0f4c2c729 100644 --- a/lib/Parse/ParseTentative.cpp +++ b/lib/Parse/ParseTentative.cpp @@ -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(); diff --git a/test/Parser/MicrosoftExtensions.c b/test/Parser/MicrosoftExtensions.c index 2b8451b26d..d03ada84b9 100644 --- a/test/Parser/MicrosoftExtensions.c +++ b/test/Parser/MicrosoftExtensions.c @@ -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 { |