[clang-cl] Ignore /Wv and /Wv:17 flags
[llvm-project.git] / clang / test / Analysis / inlining / false-positive-suppression.m
blob08a12dd09ac53a11bf4f93ab8569d2a1c2eef66c
1 // RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-config suppress-null-return-paths=false -verify %s
2 // RUN: %clang_analyze_cc1 -analyzer-checker=core -verify -DSUPPRESSED=1 %s
3 // RUN: %clang_analyze_cc1 -analyzer-checker=core -fobjc-arc -verify -DSUPPRESSED=1 %s
4 // RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-config avoid-suppressing-null-argument-paths=true -DSUPPRESSED=1 -DNULL_ARGS=1 -verify %s
6 #define ARC __has_feature(objc_arc)
8 #ifdef SUPPRESSED
9 // expected-no-diagnostics
10 #endif
12 @interface PointerWrapper
13 - (int *)getPtr;
14 - (id)getObject;
15 @end
17 id getNil(void) {
18   return 0;
21 void testNilReceiverHelperA(int *x) {
22   *x = 1;
23 #ifndef SUPPRESSED
24   // expected-warning@-2 {{Dereference of null pointer}}
25 #endif
28 void testNilReceiverHelperB(int *x) {
29   *x = 1;
30 #if !defined(SUPPRESSED)
31   // expected-warning@-2 {{Dereference of null pointer}}
32 #endif
35 void testNilReceiver(int coin) {
36   id x = getNil();
37   if (coin)
38     testNilReceiverHelperA([x getPtr]);
39   else
40     testNilReceiverHelperB([[x getObject] getPtr]);
43 // FALSE NEGATIVES (over-suppression)
45 __attribute__((objc_root_class))
46 @interface SomeClass {
47   int ivar;
49 -(int *)methodReturningNull;
51 @property(readonly) int *propertyReturningNull;
53 @property(readonly) int *synthesizedProperty;
55 @property(readonly) SomeClass *propertyReturningNil;
57 @end
59 @interface SubOfSomeClass : SomeClass
60 @end
62 @implementation SubOfSomeClass
63 @end
65 @implementation SomeClass
66 -(int *)methodReturningNull {
67   return 0;
70 -(int *)propertyReturningNull {
71   return 0;
74 -(SomeClass *)propertyReturningNil {
75   return 0;
78 +(int *)classPropertyReturningNull {
79   return 0;
81 @end
83 void testMethodReturningNull(SomeClass *sc) {
84   int *result = [sc methodReturningNull];
85   *result = 1;
86 #ifndef SUPPRESSED
87   // expected-warning@-2 {{Dereference of null pointer}}
88 #endif
91 void testPropertyReturningNull(SomeClass *sc) {
92   int *result = sc.propertyReturningNull;
93   *result = 1;
94 #ifndef SUPPRESSED
95   // expected-warning@-2 {{Dereference of null pointer}}
96 #endif
99 @implementation SubOfSomeClass (ForTestOfSuperProperty)
100 -(void)testSuperPropertyReturningNull {
101   int *result = super.propertyReturningNull;
102   *result = 1;
103 #ifndef SUPPRESSED
104   // expected-warning@-2 {{Dereference of null pointer}}
105 #endif
107 @end
109 void testClassPropertyReturningNull(void) {
110   int *result = SomeClass.classPropertyReturningNull;
111   *result = 1;
112 #ifndef SUPPRESSED
113   // expected-warning@-2 {{Dereference of null pointer}}
114 #endif
117 @implementation SomeClass (ForTestOfPropertyReturningNil)
118 void testPropertyReturningNil(SomeClass *sc) {
119   SomeClass *result = sc.propertyReturningNil;
120   result->ivar = 1;
121 #ifndef SUPPRESSED
122   // expected-warning@-2 {{Access to instance variable 'ivar' results in a dereference of a null pointer (loaded from variable 'result')}}
123 #endif
125 @end
127 void testSynthesizedPropertyReturningNull(SomeClass *sc) {
128   if (sc.synthesizedProperty)
129     return;
131   int *result = sc.synthesizedProperty;
132   *result = 1;
133 #ifndef SUPPRESSED
134   // expected-warning@-2 {{Dereference of null pointer}}
135 #endif