diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-04-28 22:32:26 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-04-28 22:32:26 +0000 |
commit | bf20dbdec6ab7d02e96fac937ad57b2b95c0675c (patch) | |
tree | 283e93ff8b5ed81761672361461480fff18a42bb /lib/Sema/SemaDeclAttr.cpp | |
parent | 0292d99c51ea4dc8737cb7fc5909ade011d374b3 (diff) |
Implement ownership attribute 'objc_ownership_make_collectable'. This allows one
to add 'CFMakeCollectable' semantics to a method.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70336 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclAttr.cpp')
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 09c627e42d..9e550ba44f 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -1539,14 +1539,16 @@ static void HandleObjCOwnershipParmAttr(Decl *d, const AttributeList &Attr, default: assert(0 && "invalid ownership attribute"); return; + case AttributeList::AT_objc_ownership_cfrelease: + name = "objc_ownership_cfrelease"; break; + case AttributeList::AT_objc_ownership_cfretain: + name = "objc_ownership_cfretain"; break; + case AttributeList::AT_objc_ownership_make_collectable: + name = "objc_ownership_make_collectable"; break; case AttributeList::AT_objc_ownership_release: name = "objc_ownership_release"; break; - case AttributeList::AT_objc_ownership_cfrelease: - name = "objc_ownership_cfrelease"; break; case AttributeList::AT_objc_ownership_retain: name = "objc_ownership_retain"; break; - case AttributeList::AT_objc_ownership_cfretain: - name = "objc_ownership_cfretain"; break; }; S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) << name @@ -1558,14 +1560,16 @@ static void HandleObjCOwnershipParmAttr(Decl *d, const AttributeList &Attr, default: assert(0 && "invalid ownership attribute"); return; - case AttributeList::AT_objc_ownership_release: - d->addAttr(::new (S.Context) ObjCOwnershipReleaseAttr()); return; case AttributeList::AT_objc_ownership_cfrelease: d->addAttr(::new (S.Context) ObjCOwnershipCFReleaseAttr()); return; - case AttributeList::AT_objc_ownership_retain: - d->addAttr(::new (S.Context) ObjCOwnershipRetainAttr()); return; case AttributeList::AT_objc_ownership_cfretain: d->addAttr(::new (S.Context) ObjCOwnershipCFRetainAttr()); return; + case AttributeList::AT_objc_ownership_make_collectable: + d->addAttr(::new (S.Context) ObjCOwnershipMakeCollectableAttr()); return; + case AttributeList::AT_objc_ownership_release: + d->addAttr(::new (S.Context) ObjCOwnershipReleaseAttr()); return; + case AttributeList::AT_objc_ownership_retain: + d->addAttr(::new (S.Context) ObjCOwnershipRetainAttr()); return; } } @@ -1607,10 +1611,11 @@ static void ProcessDeclAttribute(Decl *D, const AttributeList &Attr, Sema &S) { case AttributeList::AT_nothrow: HandleNothrowAttr (D, Attr, S); break; // Checker-specific. + case AttributeList::AT_objc_ownership_cfrelease: + case AttributeList::AT_objc_ownership_cfretain: + case AttributeList::AT_objc_ownership_make_collectable: case AttributeList::AT_objc_ownership_release: - case AttributeList::AT_objc_ownership_cfrelease: case AttributeList::AT_objc_ownership_retain: - case AttributeList::AT_objc_ownership_cfretain: HandleObjCOwnershipParmAttr(D, Attr, S); break; case AttributeList::AT_objc_ownership_returns: HandleObjCOwnershipReturnsAttr(D, Attr, S); break; |