]> granicus.if.org Git - clang/commitdiff
Add parser support for __forceinline, __w64, __ptr64.
authorSteve Naroff <snaroff@apple.com>
Thu, 25 Dec 2008 14:41:26 +0000 (14:41 +0000)
committerSteve Naroff <snaroff@apple.com>
Thu, 25 Dec 2008 14:41:26 +0000 (14:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61431 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/TokenKinds.def
lib/Lex/Preprocessor.cpp
lib/Parse/ParseDecl.cpp
test/Parser/MicrosoftExtensions.c

index 686c1b5b2a007d6495fde7f9f2162072b4ac9ebb..01a85c0a183f008fe4d5c87801c03fb586292f15 100644 (file)
@@ -312,6 +312,9 @@ KEYWORD(__declspec                  , EXTC90|EXTC99|EXTCPP|EXTCPP0x)
 KEYWORD(__cdecl                     , EXTC90|EXTC99|EXTCPP|EXTCPP0x)
 KEYWORD(__stdcall                   , EXTC90|EXTC99|EXTCPP|EXTCPP0x)
 KEYWORD(__fastcall                  , EXTC90|EXTC99|EXTCPP|EXTCPP0x)
+KEYWORD(__ptr64                     , EXTC90|EXTC99|EXTCPP|EXTCPP0x)
+KEYWORD(__w64                       , EXTC90|EXTC99|EXTCPP|EXTCPP0x)
+KEYWORD(__forceinline               , EXTC90|EXTC99|EXTCPP|EXTCPP0x)
 
 // Alternate spelling for various tokens.  There are GCC extensions in all
 // languages, but should not be disabled in strict conformance mode.
index e68a44c188b2cfa1b8f853eb8b59c8a15f2f6fd7..aa2944f331d597ff6682aac9d85a36f5de716a63 100644 (file)
@@ -484,9 +484,6 @@ static void InitializePredefinedMacros(Preprocessor &PP,
   // mode. 
   if (PP.getLangOptions().Microsoft) {
     DefineBuiltinMacro(Buf, "_cdecl=__cdecl");
-    DefineBuiltinMacro(Buf, "__ptr64=");
-    DefineBuiltinMacro(Buf, "__w64=");
-    DefineBuiltinMacro(Buf, "__forceinline=");
     DefineBuiltinMacro(Buf, "__int8=char");
     DefineBuiltinMacro(Buf, "__int16=short");
     DefineBuiltinMacro(Buf, "__int32=int");
index bf75ab0e93e2a6563e6aab6a2525ff3da0484631..e3fd6961bf8fc18b44a494a92195d439ccf99b1f 100644 (file)
@@ -561,6 +561,8 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
       continue;
       
     // Microsoft single token adornments.
+    case tok::kw___forceinline:
+    case tok::kw___w64:
     case tok::kw___cdecl:
     case tok::kw___stdcall:
     case tok::kw___fastcall:
@@ -1322,6 +1324,7 @@ void Parser::ParseTypeQualifierListOpt(DeclSpec &DS, bool AttributesAllowed) {
       isInvalid = DS.SetTypeQual(DeclSpec::TQ_restrict, Loc, PrevSpec,
                                  getLang())*2;
       break;
+    case tok::kw___ptr64:
     case tok::kw___cdecl:
     case tok::kw___stdcall:
     case tok::kw___fastcall:
index dc26c57323ad71844e2dab39101f60785e1e9b22..0ff59f75aa4604029216774ddc7da809163c1767 100644 (file)
@@ -6,3 +6,18 @@ void (*__fastcall fastpfunc)();
 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 );
+}
+__forceinline InterlockedBitTestAndSet (long *Base, long Bit)
+{
+    __asm {
+           mov eax, Bit
+           mov ecx, Base
+           lock bts [ecx], eax
+           setc al
+    };
+}
+