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:

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