Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/objc.dg/func-ptr-1.m @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* Test for handling of function pointer ivars */ /* { dg-do run } */ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ #include "../objc-obj-c++-shared/TestsuiteObject.m" extern int strcmp(const char *, const char *); extern void abort(void); #define CHECK_IF(expr) if(!(expr)) abort() typedef float (*floatfunc)(float, float); @interface MyObject : TestsuiteObject { @public int (*ivar)(int, int, int); floatfunc ffunc; } - init; @end int foo(int a, int b, int c) { return a + b + c; } float bar(float a, float b) { return a * b; } @implementation MyObject - init { [super init]; ivar = foo; ffunc = bar; return self; } @end int main () { MyObject *obj = [[MyObject alloc] init]; const char *enc = @encode(MyObject); CHECK_IF(obj->ivar(4, 5, 6) == 15); CHECK_IF(obj->ffunc(34.0, 45.0) == 34.0 * 45.0); CHECK_IF(!strcmp(enc, "{MyObject=#^?^?}")); return(0); }