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:
parent
9a31ccbad8
commit
9a629abf3d
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue