Author: aaronballman
Date: Wed Dec 4 17:23:19 2013
New Revision: 196429
URL: http://llvm.org/viewvc/llvm-project?rev=196429&view=rev
Log:
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.
Modified:
cfe/trunk/include/clang/Basic/Attr.td
cfe/trunk/lib/Sema/TargetAttributesSema.cpp
Modified: cfe/trunk/include/clang/Basic/Attr.td
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=196429&r1=196428&r2=196429&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/Attr.td (original)
+++ cfe/trunk/include/clang/Basic/Attr.td Wed Dec 4 17:23:19 2013
@@ -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 {
Modified: cfe/trunk/lib/Sema/TargetAttributesSema.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TargetAttributesSema.cpp?rev=196429&r1=196428&r2=196429&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/TargetAttributesSema.cpp (original)
+++ cfe/trunk/lib/Sema/TargetAttributesSema.cpp Wed Dec 4 17:23:19 2013
@@ -201,17 +201,9 @@ DLLExportAttr *Sema::mergeDLLExportAttr(
}
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;
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits