tomasz-kaminski-sonarsource updated this revision to Diff 464184. tomasz-kaminski-sonarsource added a comment.
Added new line Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D134941/new/ 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,20 @@ +// 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(); +} + 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,20 @@ +// 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(); +} + 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