xref: /llvm-project/clang/test/Analysis/Checkers/WebKit/call-args-checked.cpp (revision 5c20891b2bb60f82dd82a8e90b111f8c13a13ad4)
1*5c20891bSRyosuke Niwa // RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UncountedCallArgsChecker -verify %s
2*5c20891bSRyosuke Niwa 
3*5c20891bSRyosuke Niwa #include "mock-types.h"
4*5c20891bSRyosuke Niwa 
5*5c20891bSRyosuke Niwa RefCountableAndCheckable* makeObj();
6*5c20891bSRyosuke Niwa CheckedRef<RefCountableAndCheckable> makeObjChecked();
7*5c20891bSRyosuke Niwa void someFunction(RefCountableAndCheckable*);
8*5c20891bSRyosuke Niwa 
9*5c20891bSRyosuke Niwa namespace call_args_unchecked_uncounted {
10*5c20891bSRyosuke Niwa 
11*5c20891bSRyosuke Niwa static void foo() {
12*5c20891bSRyosuke Niwa   someFunction(makeObj());
13*5c20891bSRyosuke Niwa   // expected-warning@-1{{Call argument is uncounted and unsafe [alpha.webkit.UncountedCallArgsChecker]}}
14*5c20891bSRyosuke Niwa }
15*5c20891bSRyosuke Niwa 
16*5c20891bSRyosuke Niwa } // namespace call_args_checked
17*5c20891bSRyosuke Niwa 
18*5c20891bSRyosuke Niwa namespace call_args_checked {
19*5c20891bSRyosuke Niwa 
20*5c20891bSRyosuke Niwa static void foo() {
21*5c20891bSRyosuke Niwa   CheckedPtr<RefCountableAndCheckable> ptr = makeObj();
22*5c20891bSRyosuke Niwa   someFunction(ptr.get());
23*5c20891bSRyosuke Niwa }
24*5c20891bSRyosuke Niwa 
25*5c20891bSRyosuke Niwa static void bar() {
26*5c20891bSRyosuke Niwa   someFunction(CheckedPtr { makeObj() }.get());
27*5c20891bSRyosuke Niwa }
28*5c20891bSRyosuke Niwa 
29*5c20891bSRyosuke Niwa static void baz() {
30*5c20891bSRyosuke Niwa   someFunction(makeObjChecked().ptr());
31*5c20891bSRyosuke Niwa }
32*5c20891bSRyosuke Niwa 
33*5c20891bSRyosuke Niwa } // namespace call_args_checked
34*5c20891bSRyosuke Niwa 
35*5c20891bSRyosuke Niwa namespace call_args_default {
36*5c20891bSRyosuke Niwa 
37*5c20891bSRyosuke Niwa void someFunction(RefCountableAndCheckable* = makeObj());
38*5c20891bSRyosuke Niwa // expected-warning@-1{{Call argument is uncounted and unsafe [alpha.webkit.UncountedCallArgsChecker]}}
39*5c20891bSRyosuke Niwa void otherFunction(RefCountableAndCheckable* = makeObjChecked().ptr());
40*5c20891bSRyosuke Niwa 
41*5c20891bSRyosuke Niwa void foo() {
42*5c20891bSRyosuke Niwa   someFunction();
43*5c20891bSRyosuke Niwa   otherFunction();
44*5c20891bSRyosuke Niwa }
45*5c20891bSRyosuke Niwa 
46*5c20891bSRyosuke Niwa }
47