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.

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to