{ "oneway", RID_ONEWAY, D_OBJC },
{ "out", RID_OUT, D_OBJC },
/* These are recognized inside a property attribute list */
- { "assign", RID_ASSIGN, D_OBJC },
- { "copy", RID_COPY, D_OBJC },
- { "getter", RID_GETTER, D_OBJC },
- { "nonatomic", RID_NONATOMIC, D_OBJC },
- { "readonly", RID_READONLY, D_OBJC },
- { "readwrite", RID_READWRITE, D_OBJC },
- { "retain", RID_RETAIN, D_OBJC },
- { "setter", RID_SETTER, D_OBJC },
+ { "assign", RID_ASSIGN, D_OBJC },
+ { "atomic", RID_PROPATOMIC, D_OBJC },
+ { "copy", RID_COPY, D_OBJC },
+ { "getter", RID_GETTER, D_OBJC },
+ { "nonatomic", RID_NONATOMIC, D_OBJC },
+ { "readonly", RID_READONLY, D_OBJC },
+ { "readwrite", RID_READWRITE, D_OBJC },
+ { "retain", RID_RETAIN, D_OBJC },
+ { "setter", RID_SETTER, D_OBJC },
};
const unsigned int num_c_common_reswords =
/* Test that all the new property attributes can be parsed. */
@property (assign) id property_a;
@property (copy) id property_b;
+@property (atomic) int property_ca;
@property (nonatomic) int property_c;
@property (readonly) int property_d;
@property (readwrite) int property_e;
@property (assign, copy) id d; /* { dg-error ".copy. attribute conflicts with .assign. attribute" } */
@property (copy, retain) id e; /* { dg-error ".retain. attribute conflicts with .copy. attribute" } */
+@property (atomic, nonatomic) int property_j; /* { dg-error {'nonatomic' attribute conflicts with 'atomic' attribute} } */
+
@property (setter=mySetter:,setter=mySetter2:) int f; /* { dg-warning {multiple property 'setter' methods specified, the latest one will be used} } */
@property (getter=myGetter, getter=myGetter2 ) int g; /* { dg-warning {multiple property 'getter' methods specified, the latest one will be used} } */
/* Test that all the new property attributes can be parsed. */
@property (assign) id property_a;
@property (copy) id property_b;
+@property (atomic) int property_ca;
@property (nonatomic) int property_c;
@property (readonly) int property_d;
@property (readwrite) int property_e;
@property (assign, copy) id d; /* { dg-error ".copy. attribute conflicts with .assign. attribute" } */
@property (copy, retain) id e; /* { dg-error ".retain. attribute conflicts with .copy. attribute" } */
+@property (atomic, nonatomic) int property_j; /* { dg-error {'nonatomic' attribute conflicts with 'atomic' attribute} } */
+
@property (setter=mySetter:,setter=mySetter2:) int f; /* { dg-warning {multiple property 'setter' methods specified, the latest one will be used} } */
@property (getter=myGetter, getter=myGetter2 ) int g; /* { dg-warning {multiple property 'getter' methods specified, the latest one will be used} } */