| /* Test to warn on protocol mismatch in a variety of initializations. */ |
| |
| /* { dg-do compile } */ |
| |
| typedef struct objc_class *Class; |
| |
| typedef struct objc_object { |
| Class isa; |
| } *id; |
| |
| @protocol NSObject |
| @end |
| |
| @interface NSObject <NSObject> |
| @end |
| |
| @protocol NSCopying |
| - (void)copyWithZone; |
| @end |
| |
| @interface Foo:NSObject <NSCopying> |
| @end |
| |
| |
| extern id <NSObject> NSCopyObject(); |
| |
| @implementation Foo |
| - (void)copyWithZone { |
| Foo *copy = NSCopyObject(); /* { dg-warning "type \\'id <NSObject>\\' does not conform to the \\'NSCopying\\' protocol" } */ |
| |
| Foo<NSObject,NSCopying> *g = NSCopyObject(); /* { dg-warning "type \\'id <NSObject>\\' does not conform to the \\'NSCopying\\' protocol" } */ |
| |
| id<NSObject,NSCopying> h = NSCopyObject(); /* { dg-warning "type \\'id <NSObject>\\' does not conform to the \\'NSCopying\\' protocol" } */ |
| } |
| @end |