aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaDeclAttr.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-02-17 02:37:45 +0000
committerTed Kremenek <kremenek@apple.com>2010-02-17 02:37:45 +0000
commitefbddd23173ea5633cc8a004f1014c68c3ac6593 (patch)
tree90d3a87eab7cd5059cbb4904cc5cf4fd586cd874 /lib/Sema/SemaDeclAttr.cpp
parenta446ecd13a9cd2c150baa5d3db4f817db4b1eba8 (diff)
Add IBAction attribute to keep the IBOutlet attribute company.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96447 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclAttr.cpp')
-rw-r--r--lib/Sema/SemaDeclAttr.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp
index 02b2aa21b7..e0943274da 100644
--- a/lib/Sema/SemaDeclAttr.cpp
+++ b/lib/Sema/SemaDeclAttr.cpp
@@ -225,19 +225,29 @@ static void HandlePackedAttr(Decl *d, const AttributeList &Attr, Sema &S) {
S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
}
-static void HandleIBOutletAttr(Decl *d, const AttributeList &Attr, Sema &S) {
+static void HandleIBAttr(Decl *d, const AttributeList &Attr, Sema &S) {
// check the attribute arguments.
if (Attr.getNumArgs() > 0) {
S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0;
return;
}
- // The IBOutlet attribute only applies to instance variables of Objective-C
- // classes.
- if (isa<ObjCIvarDecl>(d) || isa<ObjCPropertyDecl>(d))
- d->addAttr(::new (S.Context) IBOutletAttr());
+ // The IBOutlet/IBAction attributes only apply to instance variables of
+ // Objective-C classes.
+ if (isa<ObjCIvarDecl>(d) || isa<ObjCPropertyDecl>(d)) {
+ switch (Attr.getKind()) {
+ case AttributeList::AT_IBAction:
+ d->addAttr(::new (S.Context) IBActionAttr());
+ break;
+ case AttributeList::AT_IBOutlet:
+ d->addAttr(::new (S.Context) IBOutletAttr());
+ break;
+ default:
+ llvm_unreachable("Invalid IB attribute");
+ }
+ }
else
- S.Diag(Attr.getLoc(), diag::err_attribute_iboutlet);
+ S.Diag(Attr.getLoc(), diag::err_attribute_ib) << Attr.getName();
}
static void HandleNonNullAttr(Decl *d, const AttributeList &Attr, Sema &S) {
@@ -1729,7 +1739,8 @@ static void ProcessDeclAttribute(Scope *scope, Decl *D,
// FIXME: Try to deal with other __declspec attributes!
return;
switch (Attr.getKind()) {
- case AttributeList::AT_IBOutlet: HandleIBOutletAttr (D, Attr, S); break;
+ case AttributeList::AT_IBAction:
+ case AttributeList::AT_IBOutlet: HandleIBAttr (D, Attr, S); break;
case AttributeList::AT_address_space:
case AttributeList::AT_objc_gc:
case AttributeList::AT_vector_size: