URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [objc.dg/] [property/] [synthesize-9.m] - Rev 704
Compare with Previous | Blame | View Log
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */ /* { dg-do compile } */ /* Test that when using @synthesize with a readonly property, the instance variable can be a specialization of the property type. */ #include <objc/objc.h> @protocol MyProtocol - (void)aMethod; @end @interface ClassA @end @interface ClassB : ClassA @end /* This is all OK. */ @interface Test { int v; float w; id x; Test *y; id <MyProtocol> *z; ClassA *a; ClassB *b; ClassA <MyProtocol> *c; } @property (assign, readonly) int v; @property (assign, readonly) float w; @property (assign, readonly) id x; @property (assign, readonly) Test *y; @property (assign, readonly) id <MyProtocol> *z; @property (assign, readonly) ClassA *a; @property (assign, readonly) ClassB *b; @end @implementation Test @synthesize v; @synthesize w; @synthesize x; @synthesize y; @synthesize z; @synthesize a; @synthesize b; @end /* This is sometimes OK, sometimes not OK. */ @interface Test2 { int v; /* { dg-message "originally specified here" } */ float w; /* { dg-message "originally specified here" } */ id x; /* { dg-message "originally specified here" } */ Test *y; id <MyProtocol> *z; /* { dg-message "originally specified here" } */ ClassA *a; /* { dg-message "originally specified here" } */ ClassB *b; } @property (assign, readonly) float v; @property (assign, readonly) id w; @property (assign, readonly) int x; @property (assign, readonly) id y; @property (assign, readonly) Test *z; @property (assign, readonly) ClassB *a; @property (assign, readonly) ClassA *b; @end @implementation Test2 @synthesize v; /* { dg-error "property .v. is using instance variable .v. of incompatible type" } */ @synthesize w; /* { dg-error "property .w. is using instance variable .w. of incompatible type" } */ @synthesize x; /* { dg-error "property .x. is using instance variable .x. of incompatible type" } */ @synthesize y; @synthesize z; /* { dg-error "property .z. is using instance variable .z. of incompatible type" } */ @synthesize a; /* { dg-error "property .a. is using instance variable .a. of incompatible type" } */ @synthesize b; @end