]> granicus.if.org Git - clang/commitdiff
Add support for a few MS extensions supported by the Borland compiler
authorDawn Perchik <dawn@burble.org>
Wed, 8 Sep 2010 22:56:24 +0000 (22:56 +0000)
committerDawn Perchik <dawn@burble.org>
Wed, 8 Sep 2010 22:56:24 +0000 (22:56 +0000)
(__uuidof, _fastcall, etc.).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113434 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/TokenKinds.def
test/SemaCXX/borland-extensions.cpp

index 18f29c224964ffde46fb6b799eb69732c5587932..ccc282cebb58fb5bca51dcf10d725cf418ec2fa3 100644 (file)
@@ -336,7 +336,7 @@ KEYWORD(__fastcall                  , KEYALL)
 KEYWORD(__thiscall                  , KEYALL)
 KEYWORD(__forceinline               , KEYALL)
 
-// Borland Extension.
+// Borland Extensions.
 KEYWORD(__pascal                    , KEYALL)
 
 // Altivec Extension.
@@ -369,13 +369,13 @@ ALIAS("__volatile__" , volatile   , KEYALL)
 // Microsoft extensions which should be disabled in strict conformance mode
 KEYWORD(__ptr64                   , KEYMS)
 KEYWORD(__w64                     , KEYMS)
-KEYWORD(__uuidof                  , KEYMS)
+KEYWORD(__uuidof                  , KEYMS | KEYBORLAND)
 ALIAS("_asm"         , asm        , KEYMS)
-ALIAS("_cdecl"       , __cdecl    , KEYMS)
-ALIAS("_fastcall"    , __fastcall , KEYMS)
-ALIAS("_stdcall"     , __stdcall  , KEYMS)
+ALIAS("_cdecl"       , __cdecl    , KEYMS | KEYBORLAND)
+ALIAS("_fastcall"    , __fastcall , KEYMS | KEYBORLAND)
+ALIAS("_stdcall"     , __stdcall  , KEYMS | KEYBORLAND)
 ALIAS("_thiscall"    , __thiscall , KEYMS)
-ALIAS("_uuidof"      ,__uuidof    , KEYMS)
+ALIAS("_uuidof"      , __uuidof   , KEYMS | KEYBORLAND)
 
 // Borland Extensions which should be disabled in strict conformance mode.
 ALIAS("_pascal"      , __pascal   , KEYBORLAND)
index c33527c7a03b7441663a0aab63e4d2f2cc03e081..483153004dcba762470972756dd691beef6069a1 100644 (file)
@@ -24,3 +24,30 @@ void m2() {
     i = h2<int>(&M::addP);
     f = h2(&M::subtractP);
 } 
+
+// 3. test other calling conventions
+int _cdecl fa3();
+int _fastcall fc3();
+int _stdcall fd3();
+
+// 4. test __uuidof()
+typedef struct _GUID {
+     unsigned long  Data1;
+     unsigned short Data2;
+     unsigned short Data3;
+     unsigned char  Data4[ 8 ];
+} GUID;
+
+struct __declspec(uuid("{12345678-1234-1234-1234-123456789abc}")) Foo;
+struct Data {
+     GUID const* Guid;
+};
+
+void t4() {
+    unsigned long  data;
+
+    const GUID guid_inl = __uuidof(Foo);
+    Data ata1 = { &guid_inl};
+    data = ata1.Guid->Data1;
+}
+