brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · e9f01c8 Raw
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