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