On Mar 19, 2013, at 4:07 PM, Argyrios Kyrtzidis <[email protected]> wrote:

> 
> On Mar 12, 2013, at 3:22 PM, Fariborz Jahanian <[email protected]> wrote:
> 
>> Author: fjahanian
>> Date: Tue Mar 12 17:22:38 2013
>> New Revision: 176906
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=176906&view=rev
>> Log:
>> Objective-C: In my last path, also check
>> for existence of user setter before 
>> issuing the warning about non-synthesizable
>> property. // rdar://13388503
> 
> The warning is supposed to go away if the compiler can see the setter, is 
> this right ?
> These cases still display the warning:

Yes, both of these cases should not produce a warning. I will look into this.

- Thanks, Fariborz

> 
> 1)
> 
> @interface B
> @property (readonly) id prop;
> @end
> 
> @interface B()
> -(void)setProp:(id)x;
> @end
> 
> @interface S : B
> @property (assign,readwrite) id prop;
> @end
> 
> @implementation S
> @end
> 
> 2)
> 
> @interface B
> @property (readonly) id prop;
> @end
> 
> @interface B(cat)
> @property (readwrite) id prop;
> @end
> 
> @interface S : B
> @property (assign,readwrite) id prop;
> @end
> 
> @implementation S
> @end
> 
> 
> Shouldn't the warning be suppressed ?
> 
> -Argyrios
> 
>> 
>> Modified:
>>    cfe/trunk/lib/Sema/SemaObjCProperty.cpp
>>    cfe/trunk/test/SemaObjC/default-synthesize-3.m
>> 
>> Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp
>> URL: 
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=176906&r1=176905&r2=176906&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Tue Mar 12 17:22:38 2013
>> @@ -1589,7 +1589,8 @@ void Sema::DefaultSynthesizeProperties(S
>>       ObjCPropertyDecl *PropInSuperClass = 
>> SuperPropMap[Prop->getIdentifier()];
>>       if ((Prop->getPropertyAttributes() & 
>> ObjCPropertyDecl::OBJC_PR_readwrite) &&
>>           (PropInSuperClass->getPropertyAttributes() &
>> -           ObjCPropertyDecl::OBJC_PR_readonly)) {
>> +           ObjCPropertyDecl::OBJC_PR_readonly) &&
>> +          !IMPDecl->getInstanceMethod(Prop->getSetterName())) {
>>             Diag(Prop->getLocation(), diag::warn_no_autosynthesis_property)
>>               << Prop->getIdentifier()->getName();
>>             Diag(PropInSuperClass->getLocation(), 
>> diag::note_property_declare);
>> 
>> Modified: cfe/trunk/test/SemaObjC/default-synthesize-3.m
>> URL: 
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/default-synthesize-3.m?rev=176906&r1=176905&r2=176906&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/SemaObjC/default-synthesize-3.m (original)
>> +++ cfe/trunk/test/SemaObjC/default-synthesize-3.m Tue Mar 12 17:22:38 2013
>> @@ -44,6 +44,7 @@ __attribute ((objc_requires_property_def
>> @interface NSObject @end
>> @protocol Foo
>> @property (readonly) char isFoo; // expected-note {{property declared here}}
>> +@property (readonly) char isNotFree;
>> @end
>> 
>> @interface Bar : NSObject <Foo>
>> @@ -53,6 +54,9 @@ __attribute ((objc_requires_property_def
>> - (char)isFoo {
>>     return 0;
>> }
>> +- (char)isNotFree {
>> +    return 0;
>> +}
>> @end
>> 
>> @interface Baz : Bar
>> @@ -62,10 +66,17 @@ __attribute ((objc_requires_property_def
>> @property (readwrite) char isFoo; // expected-warning {{auto property 
>> synthesis will not synthesize property 'isFoo' because it is 'readwrite' but 
>> it will be synthesized 'readonly' via another property}}
>> @property char Property1; // expected-warning {{auto property synthesis will 
>> not synthesize property 'Property1' because it cannot share an ivar with 
>> another synthesized property}}
>> @property char Property2;
>> +@property (readwrite) char isNotFree;
>> @end
>> 
>> @implementation Baz {
>>     char _isFoo;
>> +    char _isNotFree;
>> }
>> @synthesize Property2 = Property1; // expected-note {{property synthesized 
>> here}}
>> +
>> +- (void) setIsNotFree : (char)Arg {
>> +  _isNotFree = Arg;
>> +}
>> +
>> @end
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> [email protected]
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 

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

Reply via email to