diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-12-15 01:03:18 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-12-15 01:03:18 +0000 |
commit | f8aba8c618920db8f6ef2db0c554b0c270503cef (patch) | |
tree | cbcecd19dc1ba450b7a50ab275850429d9d6413c | |
parent | 5e3a8bea1cb3a8508a99982278934df32ccc7387 (diff) |
objc: do not auto synthesize properties declared in
protocols; with a warning. // rdar://10567333
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146626 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 4 | ||||
-rw-r--r-- | lib/Sema/SemaObjCProperty.cpp | 8 | ||||
-rw-r--r-- | test/SemaObjC/default-synthesize.m | 13 |
3 files changed, 24 insertions, 1 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 84be9a269c..aa6fe86081 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -528,6 +528,10 @@ def warn_owning_getter_rule : Warning< "property's synthesized getter follows Cocoa naming" " convention for returning 'owned' objects">, InGroup<DiagGroup<"objc-property-matches-cocoa-ownership-rule">>; +def warn_auto_synthesizing_protocol_property :Warning< + "auto property synthesis will not synthesize property" + " declared in a protocol">, + InGroup<DiagGroup<"objc-protocol-property-synthesis">>; def warn_property_getter_owning_mismatch : Warning< "property declared as returning non-retained objects" "; getter returning retained objects">; diff --git a/lib/Sema/SemaObjCProperty.cpp b/lib/Sema/SemaObjCProperty.cpp index 7436745ad9..c60d1b8f5e 100644 --- a/lib/Sema/SemaObjCProperty.cpp +++ b/lib/Sema/SemaObjCProperty.cpp @@ -1328,7 +1328,13 @@ void Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl* IMPDecl, if (IMPDecl->getInstanceMethod(Prop->getSetterName())) continue; } - + if (isa<ObjCProtocolDecl>(Prop->getDeclContext())) { + // We won't auto-synthesize properties declared in protocols. + Diag(IMPDecl->getLocation(), + diag::warn_auto_synthesizing_protocol_property); + Diag(Prop->getLocation(), diag::note_property_declare); + continue; + } // We use invalid SourceLocations for the synthesized ivars since they // aren't really synthesized at a particular location; they just exist. diff --git a/test/SemaObjC/default-synthesize.m b/test/SemaObjC/default-synthesize.m index 0d2f473399..d608ded97a 100644 --- a/test/SemaObjC/default-synthesize.m +++ b/test/SemaObjC/default-synthesize.m @@ -115,3 +115,16 @@ @synthesize PROP=IVAR; @end +// rdar://10567333 +@protocol MyProtocol +@property (nonatomic, strong) NSString *requiredString; // expected-note {{property declared here}} + +@optional +@property (nonatomic, strong) NSString *optionalString; +@end + +@interface MyClass <MyProtocol> +@end + +@implementation MyClass // expected-warning {{auto property synthesis will not synthesize property declared in a protocol}} +@end |