/* 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);
}

