[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:31:46 PDT 2012


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.
- fariborz

> 
> John.




More information about the cfe-commits mailing list