mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 05:56:36 +00:00

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
27 lines
798 B
C++
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();
|
|
}
|
|
|