blob: 9dad25404cb7e1ef96c705e8efef68525daa47ed [file] [log] [blame]
/* APPLE LOCAL file radar 6164211 */
/* Check that when we build a reference to array of 'id' qualified protocols,
we preserve protoloc-ness of the array elements so method prototype will
be correct. Program must build and run without abort. */
/* { dg-options "-mmacosx-version-min=10.5 -framework Cocoa" } */
/* { dg-do run } */
#import <Cocoa/Cocoa.h>
static void compare (int val)
{
if (val != 500)
abort();
}
@protocol myProto <NSObject>
- (int) width;
@end;
@interface myObject : NSObject < myProto>
@end
@implementation myObject
- (int) width
{
return 500;
}
@end
@interface myController : NSObject
{
id<myProto> manyProtos[10];
id<myProto> singleProto;
}
@end
@implementation myController
- init
{
if ([super init] != nil)
{
int x;
for (x=0;x<10; x++)
manyProtos[x] = [[myObject alloc] init];
singleProto = [[myObject alloc] init];
return self;
}
else return nil;
}
-(void)dealloc
{
int x;
for (x=0; x<10; x++)
[manyProtos[x] release];
[super dealloc];
}
- bugOut
{
compare([manyProtos[0] width]);
compare([(id<myProto>)manyProtos[0] width]);
compare([manyProtos[1] width]);
compare([(id<myProto>)manyProtos[1] width]);
compare([manyProtos[2] width]);
compare([(id<myProto>)manyProtos[2] width]);
compare([singleProto width]);
compare([(id<myProto>)singleProto width]);
return self;
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
myController *test;
test = [[myController alloc] init];
[test bugOut];
[test release];
[pool drain];
return 0;
}