nullability-pragmas-1.h
5.89 KB
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