1*820e8d86SJan Korous // RUN: %clang_analyze_cc1 -analyzer-checker=webkit.UncountedLambdaCapturesChecker %s 2>&1 | FileCheck %s --strict-whitespace 2*820e8d86SJan Korous #include "mock-types.h" 3*820e8d86SJan Korous raw_ptr()4*820e8d86SJan Korousvoid raw_ptr() { 5*820e8d86SJan Korous RefCountable* ref_countable = nullptr; 6*820e8d86SJan Korous auto foo1 = [ref_countable](){}; 7*820e8d86SJan Korous // CHECK: warning: Captured raw-pointer 'ref_countable' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 8*820e8d86SJan Korous // CHECK-NEXT:{{^}} auto foo1 = [ref_countable](){}; 9*820e8d86SJan Korous // CHECK-NEXT:{{^}} ^ 10*820e8d86SJan Korous auto foo2 = [&ref_countable](){}; 11*820e8d86SJan Korous // CHECK: warning: Captured raw-pointer 'ref_countable' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 12*820e8d86SJan Korous auto foo3 = [&](){ ref_countable = nullptr; }; 13*820e8d86SJan Korous // CHECK: warning: Implicitly captured raw-pointer 'ref_countable' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 14*820e8d86SJan Korous // CHECK-NEXT:{{^}} auto foo3 = [&](){ ref_countable = nullptr; }; 15*820e8d86SJan Korous // CHECK-NEXT:{{^}} ^ 16*820e8d86SJan Korous auto foo4 = [=](){ (void) ref_countable; }; 17*820e8d86SJan Korous // CHECK: warning: Implicitly captured raw-pointer 'ref_countable' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 18*820e8d86SJan Korous } 19*820e8d86SJan Korous references()20*820e8d86SJan Korousvoid references() { 21*820e8d86SJan Korous RefCountable automatic; 22*820e8d86SJan Korous RefCountable& ref_countable_ref = automatic; 23*820e8d86SJan Korous 24*820e8d86SJan Korous auto foo1 = [ref_countable_ref](){}; 25*820e8d86SJan Korous // CHECK: warning: Captured reference 'ref_countable_ref' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 26*820e8d86SJan Korous auto foo2 = [&ref_countable_ref](){}; 27*820e8d86SJan Korous // CHECK: warning: Captured reference 'ref_countable_ref' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 28*820e8d86SJan Korous auto foo3 = [&](){ (void) ref_countable_ref; }; 29*820e8d86SJan Korous // CHECK: warning: Implicitly captured reference 'ref_countable_ref' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 30*820e8d86SJan Korous auto foo4 = [=](){ (void) ref_countable_ref; }; 31*820e8d86SJan Korous // CHECK: warning: Implicitly captured reference 'ref_countable_ref' to uncounted type is unsafe [webkit.UncountedLambdaCapturesChecker] 32*820e8d86SJan Korous } 33*820e8d86SJan Korous quiet()34*820e8d86SJan Korousvoid quiet() { 35*820e8d86SJan Korous // This code is not expected to trigger any warnings. 36*820e8d86SJan Korous { 37*820e8d86SJan Korous RefCountable automatic; 38*820e8d86SJan Korous RefCountable &ref_countable_ref = automatic; 39*820e8d86SJan Korous } 40*820e8d86SJan Korous 41*820e8d86SJan Korous auto foo3 = [&]() {}; 42*820e8d86SJan Korous auto foo4 = [=]() {}; 43*820e8d86SJan Korous RefCountable *ref_countable = nullptr; 44*820e8d86SJan Korous } 45