forked from OSchip/llvm-project
Giving a Subjects list to DllExport, which allows the removal of some custom semantic handling. The same cannot be done for DllImport, and so comments were left explaining why.
llvm-svn: 196429
This commit is contained in:
parent
aad23ecadb
commit
8b9e236bb4
|
@ -1189,10 +1189,13 @@ def MsStruct : InheritableAttr {
|
|||
|
||||
def DLLExport : InheritableAttr, TargetSpecificAttr {
|
||||
let Spellings = [Declspec<"dllexport">];
|
||||
let Subjects = SubjectList<[Function, Var]>;
|
||||
}
|
||||
|
||||
def DLLImport : InheritableAttr, TargetSpecificAttr {
|
||||
let Spellings = [Declspec<"dllimport">];
|
||||
// Technically, the subjects for DllImport are Function and Var, but there is
|
||||
// custom semantic handling required when MicrosoftExt is true.
|
||||
}
|
||||
|
||||
def ForceInline : InheritableAttr {
|
||||
|
|
|
@ -201,17 +201,9 @@ DLLExportAttr *Sema::mergeDLLExportAttr(Decl *D, SourceRange Range,
|
|||
}
|
||||
|
||||
static void HandleDLLExportAttr(Decl *D, const AttributeList &Attr, Sema &S) {
|
||||
// Attribute can be applied only to functions or variables.
|
||||
FunctionDecl *FD = dyn_cast<FunctionDecl>(D);
|
||||
if (!FD && !isa<VarDecl>(D)) {
|
||||
S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
|
||||
<< Attr.getName() << 2 /*variable and function*/;
|
||||
return;
|
||||
}
|
||||
|
||||
// Currently, the dllexport attribute is ignored for inlined functions, unless
|
||||
// the -fkeep-inline-functions flag has been used. Warning is emitted;
|
||||
if (FD && FD->isInlineSpecified()) {
|
||||
if (isa<FunctionDecl>(D) && cast<FunctionDecl>(D)->isInlineSpecified()) {
|
||||
// FIXME: ... unless the -fkeep-inline-functions flag has been used.
|
||||
S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue