| // RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s | |
| using size_t = decltype(sizeof(int)); | |
| void *operator new(size_t, void *p) { return p; } | |
| struct myfunction { | |
| union storage_t { | |
| char buffer[100]; | |
| size_t max_align; | |
| } storage; | |
| template <typename Func> myfunction(Func fn) { | |
| new (&storage.buffer) Func(fn); | |
| } | |
| void operator()(); | |
| }; | |
| myfunction create_func() { | |
| int n; | |
| auto c = [&n] {}; | |
| return c; // expected-warning {{Address of stack memory associated with local variable 'n' returned to caller}} expected-warning{{Address of stack memory associated with local variable 'n' is still referred to by a temporary object on the stack upon returning to the caller. This will be a dangling reference}} | |
| } | |
| void gh_66221() { | |
| create_func()(); | |
| } |