[cfe-commits] r163738 - in /cfe/trunk: lib/Sema/SemaDeclObjC.cpp test/SemaObjC/arc-objc-lifetime.m

John McCall rjmccall at apple.com
Wed Sep 12 17:02:53 PDT 2012


On Sep 12, 2012, at 1:34 PM, Fariborz Jahanian wrote:
> Author: fjahanian
> Date: Wed Sep 12 15:34:47 2012
> New Revision: 163738
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=163738&view=rev
> Log:
> objective-C arc: don't issue no explicit ownership warning when
> __autoreleasing is explicitely added to param type.
> // rdar://12280826
> 
> Modified:
>    cfe/trunk/lib/Sema/SemaDeclObjC.cpp
>    cfe/trunk/test/SemaObjC/arc-objc-lifetime.m
> 
> Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=163738&r1=163737&r2=163738&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Wed Sep 12 15:34:47 2012
> @@ -282,11 +282,10 @@
>     AddFactoryMethodToGlobalPool(MDecl, true);
> }
> 
> -/// StrongPointerToObjCPointer - returns true when pointer to ObjC pointer
> -/// is __strong, or when it is any other type. It returns false when
> -/// pointer to ObjC pointer is not __strong.
> +/// HasExplicitOwnershipAttr - returns true when pointer to ObjC pointer
> +/// has explicit ownership attribute; false otherwise.
> static bool
> -StrongPointerToObjCPointer(Sema &S, ParmVarDecl *Param) {
> +HasExplicitOwnershipAttr(Sema &S, ParmVarDecl *Param) {
>   QualType T = Param->getType();
>   if (!T->isObjCIndirectLifetimeType())
>     return true;
> @@ -296,8 +295,11 @@
>         ? T->getAs<PointerType>()->getPointeeType() 
>         : T->getAs<ReferenceType>()->getPointeeType();
>   if (T->isObjCLifetimeType()) {
> -    Qualifiers::ObjCLifetime lifetime = T.getObjCLifetime();
> -    return lifetime == Qualifiers::OCL_Strong;
> +    // when lifetime is Qualifiers::OCL_None it means that it has
> +    // no implicit ownership qualifier (which means it is explicit).
> +    Qualifiers::ObjCLifetime lifetime = 
> +      T.getLocalQualifiers().getObjCLifetime();
> +    return lifetime == Qualifiers::OCL_None;
>   }
>   return true;
> }
> @@ -335,7 +337,7 @@
>           Param->setInvalidDecl();
>     if (!Param->isInvalidDecl() &&
>         getLangOpts().ObjCAutoRefCount &&
> -        !StrongPointerToObjCPointer(*this, Param))
> +        !HasExplicitOwnershipAttr(*this, Param))
>       Diag(Param->getLocation(), diag::warn_arc_strong_pointer_objc_pointer) <<
>             Param->getType();

Why is this code in SemaDeclObjC anyway?  Shouldn't it be in the code in SemaType where we add the implicit ownership qualification?

John.



More information about the cfe-commits mailing list