//-*- ObjC -*-

@protocol P0;

@protocol P1 
-(void) fm0;
@end

@class B;

@interface Root
@end

@interface A : Root <P1> {
  int iv0;
  B *iv1;
  B<P1> *iv2;
}

@property(readonly) int p0;
@property(assign,nonatomic,readwrite) int p1;
@property(copy) id p2;
@property(retain) id p3;
@property(assign, getter=getme, setter=setme:) id p4;
@property(assign, readwrite) id p5;
@end

@implementation A
@dynamic p0;
@synthesize p1 = iv0;

// Property type can differ from ivar type.
@synthesize p5 = iv2;

+(void) fm0 {
  [super fm0];
}
-(void) im0 {
  const char *s0 = __func__;
  const char *s1 = __FUNCTION__;
  const char *s2 = __PRETTY_FUNCTION__;
  [super im0];
  int x = super.p0;
}
-(void) im1: (int) x, ... {
}
@end

@implementation C : A
@end

@interface A (Cat)
@end

@implementation A (Cat)
@end

@interface B
@end

int f0(id x) {
  @synchronized(x) {
  }

  @try {
    @throw x;

  } @catch(A *e) {
    @throw;

    // @catch param doesn't require name.
  } @catch(B *) {

  } @finally {
    ;
  }

  for (id y in x) {
    break;
  }
}

#ifndef __OBJC2__
struct s0 {
  @defs(A);
};
#endif
