summaryrefslogtreecommitdiff
path: root/test/SemaObjCXX/Inputs/nullability-pragmas-1.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaObjCXX/Inputs/nullability-pragmas-1.h')
-rw-r--r--test/SemaObjCXX/Inputs/nullability-pragmas-1.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/test/SemaObjCXX/Inputs/nullability-pragmas-1.h b/test/SemaObjCXX/Inputs/nullability-pragmas-1.h
new file mode 100644
index 0000000000000..9501116924192
--- /dev/null
+++ b/test/SemaObjCXX/Inputs/nullability-pragmas-1.h
@@ -0,0 +1,101 @@
+__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}}
+
+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}}
+void f19(CFErrorRefPtr error); // expected-warning{{pointer is missing a nullability type specifier}}
+
+void g1(int (^)(int, int));
+void g2(int (^ *bp)(int, int)); // expected-warning{{block pointer is missing a nullability type specifier}}
+// expected-warning@-1{{pointer is missing a nullability type specifier}}
+void g3(block_ptr *bp); // expected-warning{{block pointer is missing a nullability type specifier}}
+// expected-warning@-1{{pointer is missing a nullability type specifier}}
+void g4(int (*fp)(int, int));
+void g5(int (**fp)(int, int)); // expected-warning 2{{pointer is missing a nullability type specifier}}
+
+@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}}
+
+@property A *aProp;
+@property NSError **anError; // expected-warning 2{{pointer is missing a nullability type specifier}}
+@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}}
+ *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}}
+void f21(int_ptr x); // expected-warning{{pointer is missing a nullability type specifier}}
+void f22(A_ptr y); // expected-warning{{pointer is missing a nullability type specifier}}
+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}}
+
+@interface A(OutsidePragmas1)
++ (instancetype)aWithInt:(int)value; // expected-warning{{pointer is missing a nullability type specifier}}
+@end