call-super-2.m

来自「linux下编程用 编译软件」· M 代码 · 共 146 行

M
146
字号
/* Check if casting 'self' or 'super' affects message lookup in the   correct way.  *//* Contributed by Ziemowit Laski <zlaski@apple.com>.  *//* { dg-do compile } */#include <stddef.h>#include <objc/objc.h>#include <objc/Object.h>#ifdef __NEXT_RUNTIME__#define OBJC_GETCLASS objc_getClass#else#define OBJC_GETCLASS objc_get_class#endif@protocol Func+ (int) class_func0;- (int) instance_func0;@end@interface Derived: Object+ (int) class_func1;+ (int) class_func2;+ (int) class_func3;+ (int) class_func4;+ (int) class_func5;+ (int) class_func6;+ (int) class_func7;- (int) instance_func1;- (int) instance_func2;- (int) instance_func3;- (int) instance_func4;- (int) instance_func5;- (int) instance_func6;- (int) instance_func7;@end@interface Derived (Categ)+ (int) categ_class_func1;+ (int) categ_class_func2;- (int) categ_instance_func1;- (int) categ_instance_func2;@end@implementation Derived+ (int) class_func1{   int i = (size_t)[self class_func0];       /* { dg-warning ".Derived. may not respond to .\\+class_func0." } */   return i + (size_t)[super class_func0];   /* { dg-warning ".Object. may not respond to .\\+class_func0." } */}+ (int) class_func2{   int i = [(id <Func>)self class_func0];  /* { dg-warning ".\\-class_func0. not found in protocol" } */   i += [(id <Func>)super class_func0];    /* { dg-warning ".\\-class_func0. not found in protocol" } */   i += [(Class <Func>)self class_func0];   return i + [(Class <Func>)super class_func0];}+ (int) class_func3{   return [(Object <Func> *)super class_func0];}+ (int) class_func4{   return [(Derived <Func> *)super class_func0];}   + (int) class_func5{   int i = (size_t)[Derived class_func0];    /* { dg-warning ".Derived. may not respond to .\\+class_func0." } */   return i + (size_t)[Object class_func0];  /* { dg-warning ".Object. may not respond to .\\+class_func0." } */}+ (int) class_func6{   return (size_t)[OBJC_GETCLASS("Object") class_func1];  /* { dg-warning ".Object. may not respond to .\\+class_func1." } */}+ (int) class_func7{   return [OBJC_GETCLASS("Derived") class_func1];}- (int) instance_func1{   int i = (size_t)[self instance_func0];     /* { dg-warning ".Derived. may not respond to .\\-instance_func0." } */   return i + (size_t)[super instance_func0]; /* { dg-warning ".Object. may not respond to .\\-instance_func0." } */}- (int) instance_func2{   return [(id <Func>)super instance_func0];}- (int) instance_func3{   return [(Object <Func> *)super instance_func0];}- (int) instance_func4{   return [(Derived <Func> *)super instance_func0];}   - (int) instance_func5{   int i = (size_t)[Derived instance_func1]; /* { dg-warning ".Derived. may not respond to .\\+instance_func1." } */   return i + (size_t)[Object instance_func1]; /* { dg-warning ".Object. may not respond to .\\+instance_func1." } */}- (int) instance_func6{   return (size_t)[OBJC_GETCLASS("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */}- (int) instance_func7{   return [OBJC_GETCLASS("Derived") class_func1];}@end@implementation Derived (Categ)+ (int) categ_class_func1{   int i = (size_t)[self class_func0];       /* { dg-warning ".Derived. may not respond to .\\+class_func0." } */   i += [self class_func1];   i += [self categ_class_func2];   i += (size_t)[self categ_instance_func1]; /* { dg-warning ".Derived. may not respond to .\\+categ_instance_func1." } */   return i + (size_t)[super class_func0];   /* { dg-warning ".Object. may not respond to .\\+class_func0." } */}+ (int) categ_class_func2{   int i = [(id <Func>)self class_func0];  /* { dg-warning ".\\-class_func0. not found in protocol" } */   i += [(id <Func>)super class_func0];    /* { dg-warning ".\\-class_func0. not found in protocol" } */   i += [(Class <Func>)self class_func0];   return i + [(Class <Func>)super class_func0];}- (int) categ_instance_func1{   int i = (size_t)[self instance_func0];    /* { dg-warning ".Derived. may not respond to .\\-instance_func0." } */   i += [(Derived <Func> *)self categ_instance_func2];   i += (size_t)[(Object <Func> *)self categ_instance_func2]; /* { dg-warning ".Object. may not respond to .\\-categ_instance_func2." } */   /* { dg-warning ".\\-categ_instance_func2. not found in protocol" "" { target *-*-* } 131 } */   i += (size_t)[(id <Func>)self categ_instance_func2];  /* { dg-warning ".\\-categ_instance_func2. not found in protocol" } */   i += [(id)self categ_instance_func2];   return i + (size_t)[super instance_func0];   /* { dg-warning ".Object. may not respond to .\\-instance_func0." } */}- (int) categ_instance_func2{   return [(id <Func>)super instance_func0];}@end/* { 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 + -
显示快捷键?