proto-lossage-4.mm

来自「Mac OS X 10.4.9 for x86 Source Code gcc」· MM 代码 · 共 53 行

MM
53
字号
/* APPLE LOCAL file mainline */ /* Test for situations in which protocol conformance information   may be lost while casting.  *//* Author: Ziemowit Laski <zlaski@apple.com>.  *//* { dg-do compile } *//* One-line substitute for objc/objc.h */typedef struct objc_object { struct objc_class *class_pointer; } *id;@protocol Proto- (long)someValue;@end@interface Obj- (long)anotherValue;@endlong foo(void) {  long receiver = 2;  Obj *objrcvr;  Obj <Proto> *objrcvr2;  /* NB: Since 'receiver' is an invalid ObjC message receiver, the compiler     should warn but then search for methods as if we were messaging 'id'.  */  receiver += [receiver someValue]; /* { dg-warning "invalid receiver type .long int." } */  receiver += [receiver anotherValue]; /* { dg-warning "invalid receiver type .long int." } */  receiver += [(Obj *)receiver someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } *//* { dg-error "invalid conversion" "" { target *-*-* } 28 } */  receiver += [(Obj *)receiver anotherValue];  receiver += [(Obj <Proto> *)receiver someValue];  receiver += [(Obj <Proto> *)receiver anotherValue];  receiver += [objrcvr someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } *//* { dg-error "invalid conversion" "" { target *-*-* } 34 } */  receiver += [objrcvr anotherValue];  receiver += [(Obj <Proto> *)objrcvr someValue];  receiver += [(Obj <Proto> *)objrcvr anotherValue];  receiver += [objrcvr2 someValue];  receiver += [objrcvr2 anotherValue];  receiver += [(Obj *)objrcvr2 someValue]; /* { dg-warning ".Obj. may not respond to .\\-someValue." } *//* { dg-warning "invalid conversion" "" { target *-*-* } 42 } */  receiver += [(Obj *)objrcvr2 anotherValue];  return receiver;}/* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 0 } *//* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 0 } *//* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 0 } */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?