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

John McCall rjmccall at apple.com
Thu Sep 13 10:48:21 PDT 2012


On Sep 13, 2012, at 10:31 AM, jahanian wrote:
> On Sep 12, 2012, at 5:02 PM, John McCall wrote:
>> 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?
> 
> All right. This is done in r163813. It turned out to be more trouble than I expected though.

Why didn't you do this as part of inferARCWriteback, where we're adding the qualifier in the first place?

John.




More information about the cfe-commits mailing list