blob: a91ccc0f5f640b10f88f02e32f6a8fc710b29b0a [file] [log] [blame]
Jordan Rose06dd4062016-12-19 20:58:20 +00001// RUN: %clang_cc1 -fsyntax-only -fblocks -std=gnu++11 -I %S/Inputs -verify %s
2// RUN: not %clang_cc1 -fdiagnostics-parseable-fixits -fblocks -std=gnu++11 -I %S/Inputs %s >%t.txt 2>&1
3// RUN: FileCheck %s < %t.txt
4// RUN: FileCheck %S/Inputs/nullability.h < %t.txt
Volodymyr Sapsai43e6f7b2017-09-28 23:18:49 +00005// RUN: FileCheck %S/Inputs/nullability-objc.h < %t.txt
Jordan Rose06dd4062016-12-19 20:58:20 +00006
7#include "nullability.h"
Volodymyr Sapsai43e6f7b2017-09-28 23:18:49 +00008#include "nullability-objc.h"
Jordan Rose3b917fe2016-11-10 23:28:30 +00009
10#pragma clang assume_nonnull begin
11
12extern void *array[2]; // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000013// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:" _Nonnull "
Jordan Rose3b917fe2016-11-10 23:28:30 +000014
15extern void* array2[2]; // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000016// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:13-[[@LINE-1]]:13}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000017
18extern void *nestedArray[2][3]; // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000019// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:" _Nonnull "
Jordan Rose3b917fe2016-11-10 23:28:30 +000020
Jordan Rose281139c2016-12-19 22:35:24 +000021// No fix-its on either the macro definition or instantiation.
22// CHECK-NOT: fix-it:"{{.*}}nullability.mm":{[[@LINE+2]]
23// CHECK-NOT: fix-it:"{{.*}}nullability.mm":{[[@LINE+2]]
24#define PTR(X) X *
25extern PTR(void) array[2]; // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
26
Jordan Rose3b917fe2016-11-10 23:28:30 +000027
28typedef const void *CFTypeRef;
29
30extern CFTypeRef typedefArray[2]; // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000031// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:17-[[@LINE-1]]:17}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000032
33
34extern void *&ref; // expected-warning {{inferring '_Nonnull' for pointer type within reference is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000035// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:"_Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000036
37extern void * &ref2; // expected-warning {{inferring '_Nonnull' for pointer type within reference is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000038// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000039
40extern void *&&ref3; // expected-warning {{inferring '_Nonnull' for pointer type within reference is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000041// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:"_Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000042
43extern void * &&ref4; // expected-warning {{inferring '_Nonnull' for pointer type within reference is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000044// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000045
46extern void *(&arrayRef)[2]; // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000047// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:"_Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000048
49extern void * (&arrayRef2)[2]; // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000050// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:14-[[@LINE-1]]:14}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000051
52extern CFTypeRef &typedefRef; // expected-warning {{inferring '_Nonnull' for pointer type within reference is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000053// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:17-[[@LINE-1]]:17}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000054extern CFTypeRef& typedefRef2; // expected-warning {{inferring '_Nonnull' for pointer type within reference is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000055// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:17-[[@LINE-1]]:17}:" _Nonnull "
Jordan Rose3b917fe2016-11-10 23:28:30 +000056
57
58void arrayNameless(void *[]); // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000059// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:26-[[@LINE-1]]:26}:"_Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000060
61void arrayNameless2(void * []); // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000062// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:27-[[@LINE-1]]:27}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000063
64void arrayNamelessTypedef(CFTypeRef[]); // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000065// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:36-[[@LINE-1]]:36}:" _Nonnull "
Jordan Rose3b917fe2016-11-10 23:28:30 +000066
67void arrayNamelessTypedef2(CFTypeRef []); // expected-warning {{inferring '_Nonnull' for pointer type within array is deprecated}}
Jordan Rose06dd4062016-12-19 20:58:20 +000068// CHECK: fix-it:"{{.*}}nullability.mm":{[[@LINE-1]]:37-[[@LINE-1]]:37}:" _Nonnull"
Jordan Rose3b917fe2016-11-10 23:28:30 +000069
70
71extern int (*pointerToArray)[2]; // no-warning
72int checkTypePTA = pointerToArray; // expected-error {{cannot initialize a variable of type 'int' with an lvalue of type 'int (* _Nonnull)[2]'}}
73
74int **arrayOfNestedPointers[2]; // no-warning
75int checkTypeANP = arrayOfNestedPointers; // expected-error {{cannot initialize a variable of type 'int' with an lvalue of type 'int **[2]'}}
76
77CFTypeRef *arrayOfNestedPointersTypedef[2]; // no-warning
78int checkTypeANPT = arrayOfNestedPointersTypedef; // expected-error {{cannot initialize a variable of type 'int' with an lvalue of type 'CFTypeRef *[2]'}}
79
80#pragma clang assume_nonnull end