diff options
| author | Ted Kremenek <kremenek@apple.com> | 2009-04-30 19:18:03 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2009-04-30 19:18:03 +0000 |
| commit | 2acb5adac95e5e5d8dbbd88f6312ad8bd4a46367 (patch) | |
| tree | 10c6f80309e7e419a5855c47dac68308fa2902fe /clang/lib/Sema | |
| parent | 290fbb1d42c9e50e94aecf72e40030b6b85b5786 (diff) | |
| download | bcm5719-llvm-2acb5adac95e5e5d8dbbd88f6312ad8bd4a46367.tar.gz bcm5719-llvm-2acb5adac95e5e5d8dbbd88f6312ad8bd4a46367.zip | |
Allow attributes 'objc_ownership_retain' and 'objc_ownership_release' to be
applied to ObjCMethodDecls, not just parameters. This allows one to specific
side-effects on the receiver of a message expression. No checker support yet.
llvm-svn: 70505
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 4853028ba36..1e3a7e58bb1 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -1559,10 +1559,10 @@ static void HandleObjCOwnershipReturnsAttr(Decl *d, const AttributeList &Attr, d->addAttr(::new (S.Context) ObjCOwnershipReturnsAttr()); } -static void HandleObjCOwnershipParmAttr(Decl *d, const AttributeList &Attr, - Sema &S) { +static void HandleObjCOwnershipAttr(Decl *d, const AttributeList &Attr, + Sema &S, bool attachToMethodDecl = false) { - if (!isa<ParmVarDecl>(d)) { + if (!isa<ParmVarDecl>(d) && (!attachToMethodDecl || !isa<ObjCMethodDecl>(d))){ const char *name; switch (Attr.getKind()) { @@ -1582,7 +1582,8 @@ static void HandleObjCOwnershipParmAttr(Decl *d, const AttributeList &Attr, }; S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) << name - << 4 /* parameter */; + << (attachToMethodDecl ? 5 /* parameter or method decl */ + : 4 /* parameter */); return; } @@ -1643,10 +1644,11 @@ static void ProcessDeclAttribute(Decl *D, const AttributeList &Attr, Sema &S) { // Checker-specific. case AttributeList::AT_objc_ownership_cfrelease: case AttributeList::AT_objc_ownership_cfretain: + HandleObjCOwnershipAttr(D, Attr, S); break; case AttributeList::AT_objc_ownership_make_collectable: case AttributeList::AT_objc_ownership_release: case AttributeList::AT_objc_ownership_retain: - HandleObjCOwnershipParmAttr(D, Attr, S); break; + HandleObjCOwnershipAttr(D, Attr, S, true); break; case AttributeList::AT_objc_ownership_returns: HandleObjCOwnershipReturnsAttr(D, Attr, S); break; |

