[cfe-commits] r163813 - in /cfe/trunk/lib/Sema: SemaDeclObjC.cpp SemaType.cpp

jahanian fjahanian at apple.com
Thu Sep 13 11:55:28 PDT 2012


On Sep 13, 2012, at 11:34 AM, John McCall wrote:

> On Sep 13, 2012, at 10:29 AM, Fariborz Jahanian wrote:
>> Modified: cfe/trunk/lib/Sema/SemaType.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=163813&r1=163812&r2=163813&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaType.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaType.cpp Thu Sep 13 12:29:07 2012
>> @@ -3335,6 +3335,36 @@
>>  return TInfo;
>> }
>> 
>> +
>> +/// checkImplicitObjCParamAttribute - diagnoses when pointer to ObjC pointer
>> +/// has implicit ownership attribute.
>> +static void
>> +checkImplicitObjCParamAttribute(Sema &S, Declarator &D, QualType T) {
>> +  if (!S.getLangOpts().ObjCAutoRefCount ||
>> +      !S.OriginalLexicalContext ||
>> +      (S.OriginalLexicalContext->getDeclKind() != Decl::ObjCImplementation &&
>> +       S.OriginalLexicalContext->getDeclKind() != Decl::ObjCCategoryImpl))
>> +    return;
> 
> In general, please use isa<> checks instead of looking at getDeclKind() directly.
> 
> I'm sorry for the run-around;  I'd forgotten the restricted scope of this warning.
> You're right that this is more appropriate to diagnose in SemaDeclObjC.
> 
>> +  if (!T->isObjCIndirectLifetimeType())
>> +    return;
> 
> You're basically doing most of the checks for this anyway;  no need to do it
> first off here.
> 
>> +  if (!T->isPointerType() && !T->isReferenceType())
>> +    return;
>> +  QualType OrigT = T;
>> +  T = T->isPointerType() 
>> +    ? T->getAs<PointerType>()->getPointeeType() 
>> +    : T->getAs<ReferenceType>()->getPointeeType();
> 
> Please simplify and re-use your queries:
> 
>  if (const PointerType *PT = T->getAs<PointerType>()) {
>    T = PT->getPointeeType();
>  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {
>    T = RT->getPointeeType();
>  } else {
>    return;
>  }
> 
>> +  if (T->isObjCLifetimeType()) {
> 
> You don't need to check this;  this is always true if there's a local
> qualifier.
> 
>> +    // 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();
> 
> // If we have a lifetime qualifier, but it's local, we must have inferred it.
> if (T.getLocalQualifiers().hasObjCLifetime())

In r163824. Thanks for the simplification suggestions.
- fariborz

> 
> John.




More information about the cfe-commits mailing list