1/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */ 2/* { dg-do compile } */ 3 4/* Test dot-syntax with accessors to be looked up in protocols. */ 5 6#include <stdlib.h> 7#include <objc/objc.h> 8#include <objc/runtime.h> 9 10@protocol ProtocolA 11- (int) countA; 12- (void) setCountA: (int)aNumber; 13@end 14 15@protocol ProtocolB 16- (int) countB; 17- (void) setCountB: (int)aNumber; 18@end 19 20@protocol ProtocolC 21- (int) countC; 22- (void) setCountC: (int)aNumber; 23@end 24 25@interface MyRootClass 26{ 27 Class isa; 28} 29+ (id) initialize; 30+ (id) alloc; 31- (id) init; 32@end 33 34@interface MySubClass <ProtocolA, ProtocolB, ProtocolC> 35@end 36 37int function (MySubClass *object, int x) 38{ 39 object.countA = x; 40 object.countB = x; 41 object.countC = object.countB; 42 43 return object.countC; 44} 45 46int function2 (MyRootClass <ProtocolA, ProtocolB, ProtocolC> *object, int x) 47{ 48 object.countA = x; 49 object.countB = x; 50 object.countC = object.countB; 51 52 return object.countC; 53} 54 55int function3 (MyRootClass <ProtocolA, ProtocolB> *object, int x) 56{ 57 object.countA = x; 58 object.countB = x; 59 object.countC = object.countB; /* { dg-error "request for member .countC. in" } */ 60 61 return object.countC; /* { dg-error "request for member .countC. in" } */ 62} 63 64int function4 (id <ProtocolA, ProtocolB, ProtocolC> object, int x) 65{ 66 object.countA = x; 67 object.countB = x; 68 object.countC = object.countB; 69 70 return object.countC; 71} 72 73int function5 (id <ProtocolA, ProtocolB> object, int x) 74{ 75 object.countA = x; 76 object.countB = x; 77 object.countC = object.countB; /* { dg-error "request for member .countC. in" } */ 78 79 return object.countC; /* { dg-error "request for member .countC. in" } */ 80} 81