forked from OSchip/llvm-project
Restore 'atomic' as an attribute of objc
properties. llvm-svn: 132866
This commit is contained in:
parent
84bd44eb8f
commit
c3bcde088f
|
@ -1380,7 +1380,8 @@ public:
|
|||
OBJC_PR_retain = 0x10,
|
||||
OBJC_PR_copy = 0x20,
|
||||
OBJC_PR_nonatomic = 0x40,
|
||||
OBJC_PR_setter = 0x80
|
||||
OBJC_PR_setter = 0x80,
|
||||
OBJC_PR_atomic = 0x100
|
||||
};
|
||||
|
||||
enum SetterKind { Assign, Retain, Copy };
|
||||
|
|
|
@ -688,7 +688,8 @@ public:
|
|||
DQ_PR_retain = 0x10,
|
||||
DQ_PR_copy = 0x20,
|
||||
DQ_PR_nonatomic = 0x40,
|
||||
DQ_PR_setter = 0x80
|
||||
DQ_PR_setter = 0x80,
|
||||
DQ_PR_atomic = 0x100
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -512,6 +512,8 @@ void Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS, Decl *ClassDecl) {
|
|||
DS.setPropertyAttributes(ObjCDeclSpec::DQ_PR_copy);
|
||||
else if (II->isStr("nonatomic"))
|
||||
DS.setPropertyAttributes(ObjCDeclSpec::DQ_PR_nonatomic);
|
||||
else if (II->isStr("atomic"))
|
||||
DS.setPropertyAttributes(ObjCDeclSpec::DQ_PR_atomic);
|
||||
else if (II->isStr("getter") || II->isStr("setter")) {
|
||||
bool IsSetter = II->getNameStart()[0] == 's';
|
||||
|
||||
|
|
|
@ -295,6 +295,8 @@ ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S,
|
|||
|
||||
if (Attributes & ObjCDeclSpec::DQ_PR_nonatomic)
|
||||
PDecl->setPropertyAttributes(ObjCPropertyDecl::OBJC_PR_nonatomic);
|
||||
else if (Attributes & ObjCDeclSpec::DQ_PR_atomic)
|
||||
PDecl->setPropertyAttributes(ObjCPropertyDecl::OBJC_PR_atomic);
|
||||
|
||||
PDecl->setPropertyAttributesAsWritten(PDecl->getPropertyAttributes());
|
||||
|
||||
|
@ -346,7 +348,8 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
|
|||
return 0;
|
||||
}
|
||||
unsigned PIkind = property->getPropertyAttributesAsWritten();
|
||||
if ((PIkind & ObjCPropertyDecl::OBJC_PR_nonatomic) == 0) {
|
||||
if ((PIkind & (ObjCPropertyDecl::OBJC_PR_atomic |
|
||||
ObjCPropertyDecl::OBJC_PR_nonatomic) ) == 0) {
|
||||
if (AtLoc.isValid())
|
||||
Diag(AtLoc, diag::warn_implicit_atomic_property);
|
||||
else
|
||||
|
@ -1088,7 +1091,8 @@ Sema::AtomicPropertySetterGetterRules (ObjCImplDecl* IMPDecl,
|
|||
unsigned Attributes = Property->getPropertyAttributes();
|
||||
unsigned AttributesAsWrittern = Property->getPropertyAttributesAsWritten();
|
||||
|
||||
if (!(AttributesAsWrittern & ObjCPropertyDecl::OBJC_PR_nonatomic)) {
|
||||
if (!(AttributesAsWrittern & ObjCPropertyDecl::OBJC_PR_atomic) &&
|
||||
!(AttributesAsWrittern & ObjCPropertyDecl::OBJC_PR_nonatomic)) {
|
||||
GetterMethod = IMPDecl->getInstanceMethod(Property->getGetterName());
|
||||
SetterMethod = IMPDecl->getInstanceMethod(Property->getSetterName());
|
||||
LookedUpGetterSetter = true;
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
@interface Super
|
||||
@property (nonatomic, readwrite) int P; // OK
|
||||
@property (readwrite) int P1; // expected-note {{property declared here}}
|
||||
@property (atomic, readwrite) int P1; // OK
|
||||
@property (readwrite) int P2; // expected-note {{property declared here}}
|
||||
@property int P3; // expected-note {{property declared here}}
|
||||
@end
|
||||
|
||||
@implementation Super // expected-warning {{property is assumed atomic when auto-synthesizing the property [-Wimplicit-atomic-properties]}}
|
||||
@synthesize P,P1,P2; // expected-warning 2 {{property is assumed atomic by default [-Wimplicit-atomic-properties]}}
|
||||
@synthesize P,P1,P2; // expected-warning {{property is assumed atomic by default [-Wimplicit-atomic-properties]}}
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue