llvm-project/clang/test/Analysis/symbol-reaper-lambda.cpp
Tomasz Kamiński 73716baa30 [analyzer][NFC] Add tests for D132236
D132236 would have introduced regressions in the symbol lifetime
handling. However, the testsuite did not catch this, so here we have
some tests, which would have break if D132236 had landed.

This patch addresses the comment https://reviews.llvm.org/D132236#3753238

Co-authored-by: Balazs Benics <balazs.benics@sonarsource.com>

Reviewed By: martong

Differential Revision: https://reviews.llvm.org/D134941
2022-10-03 15:42:38 +02:00

27 lines
798 B
C++

// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s
// expected-no-diagnostics
template <typename... Ts>
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();
}