tomasz-kaminski-sonarsource created this revision. Herald added subscribers: manas, steakhal, ASDenysPetrov, dkrupp, donat.nagy, Szelethus, mikhail.ramalho, a.sidorin, szepet, baloghadamsoftware, xazax.hun. Herald added a project: All. tomasz-kaminski-sonarsource requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
D132236 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D132236> had landed. This patch addresses the comment https://reviews.llvm.org/D132236#3753238 Co-authored-by: Balazs Benics <balazs.ben...@sonarsource.com> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D134941 Files: clang/test/Analysis/NewDeleteLeaks.cpp clang/test/Analysis/symbol-reaper-lambda.cpp Index: clang/test/Analysis/symbol-reaper-lambda.cpp =================================================================== --- /dev/null +++ clang/test/Analysis/symbol-reaper-lambda.cpp @@ -0,0 +1,19 @@ +// 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; + + 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. + return fn(); +} \ No newline at end of file Index: clang/test/Analysis/NewDeleteLeaks.cpp =================================================================== --- clang/test/Analysis/NewDeleteLeaks.cpp +++ clang/test/Analysis/NewDeleteLeaks.cpp @@ -192,3 +192,26 @@ // expected-note@-1 {{Potential leak of memory pointed to by 'v'}} } // namespace refkind_from_unoallocated_to_allocated + +namespace symbol_reaper_lifetime { +struct Nested { + int buf[2]; +}; +struct Wrapping { + Nested data; +}; + +Nested allocateWrappingAndReturnNested() { + // expected-note@+1 {{Memory is allocated}} + Wrapping const* p = new Wrapping(); + // expected-warning@+2 {{Potential leak of memory pointed to by 'p'}} + // expected-note@+1 {{Potential leak of memory pointed to by 'p'}} + return p->data; +} + +void caller() { + // expected-note@+1 {{Calling 'allocateWrappingAndReturnNested'}} + Nested n = allocateWrappingAndReturnNested(); + (void)n; +} // no-warning: No potential memory leak here, because that's been already reported. +} // namespace symbol_reaper_lifetime
Index: clang/test/Analysis/symbol-reaper-lambda.cpp =================================================================== --- /dev/null +++ clang/test/Analysis/symbol-reaper-lambda.cpp @@ -0,0 +1,19 @@ +// 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; + + 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. + return fn(); +} \ No newline at end of file Index: clang/test/Analysis/NewDeleteLeaks.cpp =================================================================== --- clang/test/Analysis/NewDeleteLeaks.cpp +++ clang/test/Analysis/NewDeleteLeaks.cpp @@ -192,3 +192,26 @@ // expected-note@-1 {{Potential leak of memory pointed to by 'v'}} } // namespace refkind_from_unoallocated_to_allocated + +namespace symbol_reaper_lifetime { +struct Nested { + int buf[2]; +}; +struct Wrapping { + Nested data; +}; + +Nested allocateWrappingAndReturnNested() { + // expected-note@+1 {{Memory is allocated}} + Wrapping const* p = new Wrapping(); + // expected-warning@+2 {{Potential leak of memory pointed to by 'p'}} + // expected-note@+1 {{Potential leak of memory pointed to by 'p'}} + return p->data; +} + +void caller() { + // expected-note@+1 {{Calling 'allocateWrappingAndReturnNested'}} + Nested n = allocateWrappingAndReturnNested(); + (void)n; +} // no-warning: No potential memory leak here, because that's been already reported. +} // namespace symbol_reaper_lifetime
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits