// RUN: %clang_cc1 -ast-print %s -o - | FileCheck %s

@interface NSObject @end

@protocol P
- (void)MethP __attribute__((availability(macosx,introduced=10.1.0,deprecated=10.2)));
@end

@interface I : NSObject <P>
- (void)MethI __attribute__((availability(macosx,introduced=10.1.0,deprecated=10.2)));
@end

@interface I(CAT)
- (void)MethCAT __attribute__((availability(macosx,introduced=10_1_0,deprecated=10_2)));
@end

@implementation I
- (void)MethP __attribute__((availability(macosx,introduced=10.1.0,deprecated=10.2))) {}
- (void)MethI __attribute__((availability(macosx,introduced=10.1.0,deprecated=10.2))) {}

- (void)methodWithArg:(int)x andAnotherOne:(int)y { }
@end

// CHECK: @protocol P
// CHECK: - (void)MethP __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2)));
// CHECK: @end

// CHECK: @interface I : NSObject<P> 
// CHECK: - (void)MethI __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2)));
// CHECK: @end

// CHECK: @interface I(CAT)
// CHECK: - (void)MethCAT __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2)));
// CHECK: @end

// CHECK: @implementation I
// CHECK: - (void)MethP __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2))) {
// CHECK: }

// CHECK: - (void)MethI __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2))) {
// CHECK: }

// CHECK: - (void)methodWithArg:(int)x andAnotherOne:(int)y {
// CHECK: }

// CHECK: @end

@class C1;
struct __attribute__((objc_bridge_related(C1,,))) S1;

// CHECK: @class C1;
// CHECK: struct __attribute__((objc_bridge_related(C1, , ))) S1;

@interface ImplicitPropertyWithSetterOnly

- (void)setX:(int)x;

@end

void printImplicitPropertyWithSetterOnly(ImplicitPropertyWithSetterOnly *x) {
  x.x = 313; // CHECK: x.x = 313;
}
