]> granicus.if.org Git - clang/commitdiff
Actually remove the hack which was blocking the Borland-style attributes from
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 29 Jan 2013 01:38:41 +0000 (01:38 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 29 Jan 2013 01:38:41 +0000 (01:38 +0000)
working, and add the missing attribute spellings. This brings _pascal,
_fastcall, _stdcall and _cdecl to life in -fborland-extensions mode.

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

include/clang/Basic/Attr.td
lib/Sema/SemaDeclAttr.cpp
test/SemaCXX/borland-extensions.cpp

index 8a3e788bfecfef4ccbeab336f61b21d9b61e8e6e..a65ffa431912a853b2b9ca4eab5b681214119dc1 100644 (file)
@@ -220,7 +220,8 @@ def CarriesDependency : InheritableParamAttr {
 }
 
 def CDecl : InheritableAttr {
-  let Spellings = [GNU<"cdecl">, CXX11<"gnu", "cdecl">, Keyword<"__cdecl">];
+  let Spellings = [GNU<"cdecl">, CXX11<"gnu", "cdecl">, Keyword<"__cdecl">,
+                   Keyword<"_cdecl">];
 }
 
 // cf_audited_transfer indicates that the given function has been
@@ -340,7 +341,7 @@ def FallThrough : Attr {
 
 def FastCall : InheritableAttr {
   let Spellings = [GNU<"fastcall">, CXX11<"gnu", "fastcall">,
-                   Keyword<"__fastcall">];
+                   Keyword<"__fastcall">, Keyword<"_fastcall">];
 }
 
 def Final : InheritableAttr {
@@ -638,16 +639,16 @@ def Sentinel : InheritableAttr {
 
 def StdCall : InheritableAttr {
   let Spellings = [GNU<"stdcall">, CXX11<"gnu", "stdcall">,
-                   Keyword<"__stdcall">];
+                   Keyword<"__stdcall">, Keyword<"_stdcall">];
 }
 
 def ThisCall : InheritableAttr {
   let Spellings = [GNU<"thiscall">, CXX11<"gnu", "thiscall">,
-                   Keyword<"__thiscall">];
+                   Keyword<"__thiscall">, Keyword<"_thiscall">];
 }
 
 def Pascal : InheritableAttr {
-  let Spellings = [GNU<"pascal">, Keyword<"__pascal">];
+  let Spellings = [GNU<"pascal">, Keyword<"__pascal">, Keyword<"_pascal">];
 }
 
 def TransparentUnion : InheritableAttr {
index 12483a34e02a58a969611ab7e193dde6a3c464e9..a4b8c356ddeadef4543aed17ede0358b9581fed0 100644 (file)
@@ -4759,13 +4759,6 @@ static void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D,
   if (Attr.isInvalid())
     return;
 
-  // FIXME: Ignore unknown keyword attributes for now. We see this in the case
-  // of some Borland attributes, like __pascal.
-  // FIXME: Add these attributes to Attr.td and mark as ignored!
-  if (Attr.isKeywordAttribute() &&
-      Attr.getKind() == AttributeList::UnknownAttribute)
-    return;
-
   // Ignore C++11 attributes on declarator chunks: they appertain to the type
   // instead.
   if (Attr.isCXX11Attribute() && !IncludeCXX11Attributes)
index f9414f8869a9670a1bd49331ebeb4844a23b9af3..d214473031e01468b7e6d2682c063cd05efa73ca 100644 (file)
@@ -7,6 +7,7 @@
 int dummy_function() { return 0; }
 
 // 2. test __pascal
+// expected-warning@+1 {{calling convention '_pascal' ignored for this target}}
 int _pascal f2();
 
 // expected-warning@+1 {{calling convention '__pascal' ignored for this target}}
@@ -33,7 +34,9 @@ void m2() {
 
 // 3. test other calling conventions
 int _cdecl fa3();
+// expected-warning@+1 {{calling convention '_fastcall' ignored for this target}}
 int _fastcall fc3();
+// expected-warning@+1 {{calling convention '_stdcall' ignored for this target}}
 int _stdcall fd3();
 
 // 4. test __uuidof()