1 __attribute__((objc_root_class)) 2 @interface NSError 3 @end 4 5 __attribute__((objc_root_class)) 6 @interface A 7 @end 8 9 struct X { }; 10 11 void f1(int *x); // expected-warning{{pointer is missing a nullability type specifier}} 12 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 13 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 14 15 typedef struct __attribute__((objc_bridge(NSError))) __CFError *CFErrorRef; 16 typedef NSError *NSErrorPtr; 17 typedef NSError **NSErrorPtrPtr; 18 typedef CFErrorRef *CFErrorRefPtr; 19 typedef int *int_ptr; 20 typedef A *A_ptr; 21 typedef int (^block_ptr)(int, int); 22 23 #pragma clang assume_nonnull begin 24 25 void f2(int *x); 26 void f3(A* obj); 27 void f4(int (^block)(int, int)); 28 void f5(int_ptr x); 29 void f6(A_ptr obj); 30 void f7(int * _Nullable x); 31 void f8(A * _Nullable obj); 32 void f9(int X::* mem_ptr); 33 void f10(int (X::*mem_func)(int, int)); 34 void f11(int X::* _Nullable mem_ptr); 35 void f12(int (X::* _Nullable mem_func)(int, int)); 36 37 int_ptr f13(void); 38 A *f14(void); 39 40 int * _Null_unspecified f15(void); 41 A * _Null_unspecified f16(void); 42 void f17(CFErrorRef *error); // expected-note{{no known conversion from 'A * _Nonnull' to 'CFErrorRef _Nullable * _Nullable' (aka '__CFError **') for 1st argument}} 43 void f18(A **); // expected-warning 2{{pointer is missing a nullability type specifier}} 44 // expected-note@-1 2 {{insert '_Nullable' if the pointer may be null}} 45 // expected-note@-2 2 {{insert '_Nonnull' if the pointer should never be null}} 46 void f19(CFErrorRefPtr error); // expected-warning{{pointer is missing a nullability type specifier}} 47 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 48 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 49 50 void g1(int (^)(int, int)); 51 void g2(int (^ *bp)(int, int)); // expected-warning{{block pointer is missing a nullability type specifier}} 52 // expected-note@-1{{insert '_Nullable' if the block pointer may be null}} 53 // expected-note@-2{{insert '_Nonnull' if the block pointer should never be null}} 54 // expected-warning@-3{{pointer is missing a nullability type specifier}} 55 // expected-note@-4{{insert '_Nullable' if the pointer may be null}} 56 // expected-note@-5{{insert '_Nonnull' if the pointer should never be null}} 57 void g3(block_ptr *bp); // expected-warning{{block pointer is missing a nullability type specifier}} 58 // expected-note@-1{{insert '_Nullable' if the block pointer may be null}} 59 // expected-note@-2{{insert '_Nonnull' if the block pointer should never be null}} 60 // expected-warning@-3{{pointer is missing a nullability type specifier}} 61 // expected-note@-4{{insert '_Nullable' if the pointer may be null}} 62 // expected-note@-5{{insert '_Nonnull' if the pointer should never be null}} 63 void g4(int (*fp)(int, int)); 64 void g5(int (**fp)(int, int)); // expected-warning 2{{pointer is missing a nullability type specifier}} 65 // expected-note@-1 2 {{insert '_Nullable' if the pointer may be null}} 66 // expected-note@-2 2 {{insert '_Nonnull' if the pointer should never be null}} 67 68 @interface A(Pragmas1) 69 + (instancetype)aWithA:(A *)a; 70 - (A *)method1:(A_ptr)ptr; 71 - (null_unspecified A *)method2; 72 - (void)method3:(NSError **)error; // expected-note{{passing argument to parameter 'error' here}} 73 - (void)method4:(NSErrorPtr *)error; // expected-note{{passing argument to parameter 'error' here}} 74 - (void)method5:(NSErrorPtrPtr)error; 75 // expected-warning@-1{{pointer is missing a nullability type specifier}} 76 // expected-note@-2{{insert '_Nullable' if the pointer may be null}} 77 // expected-note@-3{{insert '_Nonnull' if the pointer should never be null}} 78 79 @property A *aProp; 80 @property NSError **anError; // expected-warning 2{{pointer is missing a nullability type specifier}} 81 // expected-note@-1 2 {{insert '_Nullable' if the pointer may be null}} 82 // expected-note@-2 2 {{insert '_Nonnull' if the pointer should never be null}} 83 @end 84 85 int *global_int_ptr; 86 87 // typedefs not inferred _Nonnull 88 typedef int *int_ptr_2; 89 90 typedef int * // expected-warning{{pointer is missing a nullability type specifier}} 91 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 92 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 93 *int_ptr_ptr; 94 95 static inline void f30(void) { 96 float *fp = global_int_ptr; // expected-error{{cannot initialize a variable of type 'float *' with an lvalue of type 'int * _Nonnull'}} 97 98 int_ptr_2 ip2; 99 float *fp2 = ip2; // expected-error{{cannot initialize a variable of type 'float *' with an lvalue of type 'int_ptr_2' (aka 'int *')}} 100 101 int_ptr_ptr ipp; 102 float *fp3 = ipp; // expected-error{{lvalue of type 'int_ptr_ptr' (aka 'int **')}} 103 } 104 105 @interface AA : A { 106 @public 107 id ivar1; 108 _Nonnull id ivar2; 109 } 110 @end 111 112 #pragma clang assume_nonnull end 113 114 void f20(A *a); // expected-warning{{pointer is missing a nullability type specifier}} 115 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 116 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 117 void f21(int_ptr x); // expected-warning{{pointer is missing a nullability type specifier}} 118 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 119 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 120 void f22(A_ptr y); // expected-warning{{pointer is missing a nullability type specifier}} 121 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 122 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 123 void f23(int_ptr _Nullable x); 124 void f24(A_ptr _Nullable y); 125 void f25(int_ptr_2 x); // expected-warning{{pointer is missing a nullability type specifier}} 126 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 127 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 128 129 @interface A(OutsidePragmas1) 130 + (instancetype)aWithInt:(int)value; // expected-warning{{pointer is missing a nullability type specifier}} 131 // expected-note@-1{{insert '_Nullable' if the pointer may be null}} 132 // expected-note@-2{{insert '_Nonnull' if the pointer should never be null}} 133 @end 134