// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s // expected-no-diagnostics template void escape(Ts&...); struct Dummy {}; int strange(Dummy param) { Dummy local_pre_lambda; int ref_captured = 0; // LambdaExpr is modeled as lazyCompoundVal of tempRegion, that contains // all captures. In this instance, this region contains a pointer/reference // to ref_captured variable. auto fn = [&] { escape(param, local_pre_lambda); return ref_captured; // no-warning: The value is not garbage. }; int local_defined_after_lambda; // Unused, but necessary! Important that it's before the call. // The ref_captured binding should not be pruned at this point, as it is still // accessed via reference captured in operator() of fn. return fn(); }