diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2011-08-19 19:28:44 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-08-19 19:28:44 +0000 |
commit | bc03aea4bec84d7abecabd26b8583adb687c4089 (patch) | |
tree | 9b1b66c8aa805ce6248eb3a04e18d5389b0af156 | |
parent | e6f07f538fd0eddd6c087fcc01d4e4ff19129c71 (diff) |
objc-arc: @property definitions should default to (strong) when not
specified. // rdar://9971982
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138062 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaObjCProperty.cpp | 21 | ||||
-rw-r--r-- | test/CodeGenObjC/arc.m | 16 | ||||
-rw-r--r-- | test/SemaObjC/arc.m | 6 |
3 files changed, 32 insertions, 11 deletions
diff --git a/lib/Sema/SemaObjCProperty.cpp b/lib/Sema/SemaObjCProperty.cpp index 9602c2bd5b..1d0b5eff90 100644 --- a/lib/Sema/SemaObjCProperty.cpp +++ b/lib/Sema/SemaObjCProperty.cpp @@ -605,7 +605,8 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S, !PropertyIvarType.getObjCLifetime()) { if (!property->hasWrittenStorageAttribute() && - property->getType()->isObjCRetainableType()) { + property->getType()->isObjCRetainableType() && + !(kind & ObjCPropertyDecl::OBJC_PR_strong) ) { Diag(PropertyLoc, diag::err_arc_objc_property_default_assign_on_object); Diag(property->getLocation(), diag::note_property_declare); @@ -1707,13 +1708,19 @@ void Sema::CheckObjCPropertyAttributes(Decl *PDecl, ObjCDeclSpec::DQ_PR_weak)) && !(Attributes & ObjCDeclSpec::DQ_PR_readonly) && PropertyTy->isObjCObjectPointerType()) { - // Skip this warning in gc-only mode. - if (getLangOptions().getGCMode() != LangOptions::GCOnly) - Diag(Loc, diag::warn_objc_property_no_assignment_attribute); + if (getLangOptions().ObjCAutoRefCount) + // With arc, @property definitions should default to (strong) when + // not specified + PropertyDecl->setPropertyAttributes(ObjCPropertyDecl::OBJC_PR_strong); + else { + // Skip this warning in gc-only mode. + if (getLangOptions().getGCMode() != LangOptions::GCOnly) + Diag(Loc, diag::warn_objc_property_no_assignment_attribute); - // If non-gc code warn that this is likely inappropriate. - if (getLangOptions().getGCMode() == LangOptions::NonGC) - Diag(Loc, diag::warn_objc_property_default_assign_on_object); + // If non-gc code warn that this is likely inappropriate. + if (getLangOptions().getGCMode() == LangOptions::NonGC) + Diag(Loc, diag::warn_objc_property_default_assign_on_object); + } // FIXME: Implement warning dependent on NSCopying being // implemented. See also: diff --git a/test/CodeGenObjC/arc.m b/test/CodeGenObjC/arc.m index 7883b0ebaf..154918bb5b 100644 --- a/test/CodeGenObjC/arc.m +++ b/test/CodeGenObjC/arc.m @@ -1839,3 +1839,19 @@ void test62(void) { // CHECK: ret void } + +// rdar://9971982 +@class NSString; + +@interface Person { + NSString *name; +} +@property NSString *address; +@end + +@implementation Person +@synthesize address; +@end +// CHECK: call i8* @objc_getProperty +// CHECK: call void @objc_setProperty + diff --git a/test/SemaObjC/arc.m b/test/SemaObjC/arc.m index 83835ebd03..15ce0e2f6e 100644 --- a/test/SemaObjC/arc.m +++ b/test/SemaObjC/arc.m @@ -491,9 +491,7 @@ void test26(id y) { __weak id _myProp1; id myProp2; } -@property id x; // expected-warning {{no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed}} \ - // expected-warning {{default property attribute 'assign' not appropriate for non-gc object}} \ - // expected-note {{declared here}} +@property id x; @property (readonly) id ro; // expected-note {{declared here}} @property (readonly) id custom_ro; @property int y; @@ -504,7 +502,7 @@ void test26(id y) { @end @implementation Test27 -@synthesize x; // expected-error {{ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute}} +@synthesize x; @synthesize ro; // expected-error {{ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute}} @synthesize y; |