From 9a629abf3d9211aaaf96f66b7bf6f2fe99414bc3 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Tue, 29 Jan 2013 01:38:41 +0000 Subject: [PATCH] Actually remove the hack which was blocking the Borland-style attributes from working, and add the missing attribute spellings. This brings _pascal, _fastcall, _stdcall and _cdecl to life in -fborland-extensions mode. llvm-svn: 173749 --- clang/include/clang/Basic/Attr.td | 11 ++++++----- clang/lib/Sema/SemaDeclAttr.cpp | 7 ------- clang/test/SemaCXX/borland-extensions.cpp | 3 +++ 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 8a3e788..a65ffa4 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -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 { diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 12483a3..a4b8c35 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -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) diff --git a/clang/test/SemaCXX/borland-extensions.cpp b/clang/test/SemaCXX/borland-extensions.cpp index f9414f8..d214473 100644 --- a/clang/test/SemaCXX/borland-extensions.cpp +++ b/clang/test/SemaCXX/borland-extensions.cpp @@ -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() -- 2.7.4