/* APPLE LOCAL file radar 6230701 */
/* Test that no trampoline is generated for this test case. */
/* { dg-do run { target *-*-darwin[1-2][0-9]* } } */
/* { dg-options "-mmacosx-version-min=10.6 -ObjC -framework Foundation -O0" { target *-*-darwin* } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } */

#import <Foundation/NSObject.h>

#import <stdio.h>

extern void abort(void);
static void __enable_execute_stack ()
{
	abort();
}

@interface A : NSObject
- (int)bork:(int)i;
@end

@implementation A
- (int)bork:(int)i {
  printf("i == %d\n", i);
  return i + 37;
}
@end

@interface B : A
- (id)foo:(id)i;
@end

@implementation B
- (id)foo:(id)i {
  printf("Hello world\n");
}

- (id)bar:(int)i {
  int  new;

  [self foo:
    ^() {
      __block int new;
      new = [super bork:i];
    }];
}
@end

int main() {
  B *b = [[B alloc] init];

  [b foo:0];
  [b bar:0];
  [b release];
  return 0;
}

