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
This commit is contained in:
Richard Smith 2013-01-29 01:38:41 +00:00
parent 9a31ccbad8
commit 9a629abf3d
3 changed files with 9 additions and 12 deletions

View File

@ -220,7 +220,8 @@ def CarriesDependency : InheritableParamAttr {
} }
def CDecl : InheritableAttr { 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 // cf_audited_transfer indicates that the given function has been
@ -340,7 +341,7 @@ def FallThrough : Attr {
def FastCall : InheritableAttr { def FastCall : InheritableAttr {
let Spellings = [GNU<"fastcall">, CXX11<"gnu", "fastcall">, let Spellings = [GNU<"fastcall">, CXX11<"gnu", "fastcall">,
Keyword<"__fastcall">]; Keyword<"__fastcall">, Keyword<"_fastcall">];
} }
def Final : InheritableAttr { def Final : InheritableAttr {
@ -638,16 +639,16 @@ def Sentinel : InheritableAttr {
def StdCall : InheritableAttr { def StdCall : InheritableAttr {
let Spellings = [GNU<"stdcall">, CXX11<"gnu", "stdcall">, let Spellings = [GNU<"stdcall">, CXX11<"gnu", "stdcall">,
Keyword<"__stdcall">]; Keyword<"__stdcall">, Keyword<"_stdcall">];
} }
def ThisCall : InheritableAttr { def ThisCall : InheritableAttr {
let Spellings = [GNU<"thiscall">, CXX11<"gnu", "thiscall">, let Spellings = [GNU<"thiscall">, CXX11<"gnu", "thiscall">,
Keyword<"__thiscall">]; Keyword<"__thiscall">, Keyword<"_thiscall">];
} }
def Pascal : InheritableAttr { def Pascal : InheritableAttr {
let Spellings = [GNU<"pascal">, Keyword<"__pascal">]; let Spellings = [GNU<"pascal">, Keyword<"__pascal">, Keyword<"_pascal">];
} }
def TransparentUnion : InheritableAttr { def TransparentUnion : InheritableAttr {

View File

@ -4759,13 +4759,6 @@ static void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D,
if (Attr.isInvalid()) if (Attr.isInvalid())
return; 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 // Ignore C++11 attributes on declarator chunks: they appertain to the type
// instead. // instead.
if (Attr.isCXX11Attribute() && !IncludeCXX11Attributes) if (Attr.isCXX11Attribute() && !IncludeCXX11Attributes)

View File

@ -7,6 +7,7 @@
int dummy_function() { return 0; } int dummy_function() { return 0; }
// 2. test __pascal // 2. test __pascal
// expected-warning@+1 {{calling convention '_pascal' ignored for this target}}
int _pascal f2(); int _pascal f2();
// expected-warning@+1 {{calling convention '__pascal' ignored for this target}} // expected-warning@+1 {{calling convention '__pascal' ignored for this target}}
@ -33,7 +34,9 @@ void m2() {
// 3. test other calling conventions // 3. test other calling conventions
int _cdecl fa3(); int _cdecl fa3();
// expected-warning@+1 {{calling convention '_fastcall' ignored for this target}}
int _fastcall fc3(); int _fastcall fc3();
// expected-warning@+1 {{calling convention '_stdcall' ignored for this target}}
int _stdcall fd3(); int _stdcall fd3();
// 4. test __uuidof() // 4. test __uuidof()