1*73dcbd41SBalazs Benics // RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s 2*73dcbd41SBalazs Benics 3*73dcbd41SBalazs Benics using size_t = decltype(sizeof(int)); operator new(size_t,void * p)4*73dcbd41SBalazs Benicsvoid *operator new(size_t, void *p) { return p; } 5*73dcbd41SBalazs Benics 6*73dcbd41SBalazs Benics struct myfunction { 7*73dcbd41SBalazs Benics union storage_t { 8*73dcbd41SBalazs Benics char buffer[100]; 9*73dcbd41SBalazs Benics size_t max_align; 10*73dcbd41SBalazs Benics } storage; 11*73dcbd41SBalazs Benics myfunctionmyfunction12*73dcbd41SBalazs Benics template <typename Func> myfunction(Func fn) { 13*73dcbd41SBalazs Benics new (&storage.buffer) Func(fn); 14*73dcbd41SBalazs Benics } 15*73dcbd41SBalazs Benics void operator()(); 16*73dcbd41SBalazs Benics }; 17*73dcbd41SBalazs Benics create_func()18*73dcbd41SBalazs Benicsmyfunction create_func() { 19*73dcbd41SBalazs Benics int n; 20*73dcbd41SBalazs Benics auto c = [&n] {}; 21*73dcbd41SBalazs Benics return c; // 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}} 22*73dcbd41SBalazs Benics } gh_66221()23*73dcbd41SBalazs Benicsvoid gh_66221() { 24*73dcbd41SBalazs Benics create_func()(); 25*73dcbd41SBalazs Benics } 26