// RUN: %clang_cc1                 -verify -fsyntax-only -fblocks -Wnullable-to-nonnull-conversion %s
// RUN: %clang_cc1 -xobjective-c++ -verify -fsyntax-only -fblocks -Wnullable-to-nonnull-conversion %s

@class X;
@class NSError;

_Static_assert(__has_feature(nullability_nullable_result), "");

@interface SomeClass
-(void)async_get:(void (^)(X *_Nullable_result rptr, NSError *err))completionHandler;
@end

void call(SomeClass *sc) {
  [sc async_get:^(X *_Nullable_result rptr, NSError *err) {}];
  [sc async_get:^(X *_Nullable rptr, NSError *err) {}];
}

void test_conversion() {
  X *_Nullable_result nr;
  X *_Nonnull l = nr; // expected-warning{{implicit conversion from nullable pointer 'X * _Nullable_result' to non-nullable pointer type 'X * _Nonnull'}}

  (void)^(X * _Nullable_result p) {
    X *_Nonnull l = p; // expected-warning{{implicit conversion from nullable pointer 'X * _Nullable_result' to non-nullable pointer type 'X * _Nonnull'}}
  };
}

void test_dup() {
  id _Nullable_result _Nullable_result a; // expected-warning {{duplicate nullability specifier _Nullable_result}}
  id _Nullable _Nullable_result b; // expected-error{{nullability specifier _Nullable_result conflicts with existing specifier '_Nullable'}}
  id _Nullable_result _Nonnull c; // expected-error{{nullability specifier '_Nonnull' conflicts with existing specifier _Nullable_result}}
}

@interface NoContextSensitive
-(nullable_result id)m; // expected-error {{expected a type}}
@property(assign, nullable_result) id p; // expected-error{{unknown property attribute 'nullable_result'}}
@end
