/* Check if method parameters that are functions are gracefully decayed
   into pointers.  */
/* Contributed by Ziemowit Laski  <zlaski@apple.com>  */
/* { dg-do run } */

#include <objc/Object.h>
#include <stdlib.h>

@interface Func: Object
+ (int) processNumber:(int)a and:(int)b usingFunction:(int(int,int))func;
@end

@implementation Func
+ (int) processNumber:(int)a and:(int)b usingFunction:(int(int,int))func {
  return func (a, b);
}
@end

static int my_computation(int a, int b) {
  return a * 2 + b * 3;
}

static int processNumber(int a, int b, int func(int, int)) {
  return func(a, b);
}

int main(void) {
  int result = processNumber (6, 8, my_computation);
  if (result != 36)
    abort ();

  result = [Func processNumber:8 and:6 usingFunction:my_computation];
  if (result != 34)
    abort ();

  return 0;
}
