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

jahanian fjahanian at apple.com
Thu Sep 13 10:49:40 PDT 2012


On Sep 13, 2012, at 10:48 AM, John McCall wrote:

> 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?

Because, at that point we don't have the complete type. I need the complete type and it is built later.
- Fariborz

> 
> John.
> 




More information about the cfe-commits mailing list