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