[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