86 lines · cpp
1// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UncheckedCallArgsChecker -verify %s2 3#include "mock-types.h"4 5RefCountableAndCheckable* makeObj();6CheckedRef<RefCountableAndCheckable> makeObjChecked();7void someFunction(RefCountableAndCheckable*);8 9namespace call_args_unchecked_uncounted {10 11static void foo() {12 someFunction(makeObj());13 // expected-warning@-1{{Call argument is unchecked and unsafe [alpha.webkit.UncheckedCallArgsChecker]}}14}15 16} // namespace call_args_unchecked_uncounted17 18namespace call_args_checked {19 20static void foo() {21 CheckedPtr<RefCountableAndCheckable> ptr = makeObj();22 someFunction(ptr.get());23}24 25static void bar() {26 someFunction(CheckedPtr { makeObj() }.get());27}28 29static void baz() {30 someFunction(makeObjChecked().ptr());31}32 33} // namespace call_args_checked34 35namespace call_args_member {36 37void consume(CheckedObj&);38 39struct WrapperObj {40 CheckedObj checked;41 CheckedObj& checkedRef;42 void foo() {43 consume(checked);44 consume(checkedRef);45 // expected-warning@-1{{Call argument is unchecked and unsafe [alpha.webkit.UncheckedCallArgsChecker]}}46 }47 void bar(WrapperObj& other) {48 consume(other.checked);49 // expected-warning@-1{{Call argument is unchecked and unsafe [alpha.webkit.UncheckedCallArgsChecker]}}50 }51};52 53} // namespace call_args_checked54 55namespace call_args_default {56 57void someFunction(RefCountableAndCheckable* = makeObj());58// expected-warning@-1{{Call argument is unchecked and unsafe [alpha.webkit.UncheckedCallArgsChecker]}}59void otherFunction(RefCountableAndCheckable* = makeObjChecked().ptr());60 61void foo() {62 someFunction();63 otherFunction();64}65 66}67 68namespace call_args_checked_assignment {69 70CheckedObj* provide();71void foo() {72 CheckedPtr<CheckedObj> ptr;73 ptr = provide();74}75 76}77 78namespace call_with_std_move {79 80void consume(CheckedObj&&);81void foo(CheckedObj&& obj) {82 consume(std::move(obj));83}84 85}86