https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49974
--- Comment #18 from Martin Sebor <msebor at gcc dot gnu.org> --- This detection is partially implemented in GCC 12 by the -Wdnagling-pointer: $ cat pr49974.C && gcc -O -S -Wall pr49974.C struct X { }; inline const X& f(const X& r) { return r; } const X& g() { X x; return f(x); // !!! } const X& h() { return f(X()); // !!! } struct Y { Y(int& i) : r(i) { } int& r; }; Y f() { int i=0; return Y(i); } pr49974.C: In function ‘const X& g()’: pr49974.C:9:15: warning: using a dangling pointer to ‘x’ [-Wdangling-pointer=] 9 | return f(x); // !!! | ^ pr49974.C:8:7: note: ‘x’ declared here 8 | X x; | ^ pr49974.C: In function ‘const X& h()’: pr49974.C:14:17: warning: using a dangling pointer to an unnamed temporary [-Wdangling-pointer=] 14 | return f(X()); // !!! | ^ pr49974.C:14:16: note: unnamed temporary defined here 14 | return f(X()); // !!! | ^ For the test case in comment #17 GCC with -O1 issues: pr49974-c17.C: In function ‘int main()’: pr49974-c17.C:11:12: warning: using a dangling pointer to an unnamed temporary [-Wdangling-pointer=] 11 | return x.i; | ^ pr49974-c17.C:10:15: note: unnamed temporary defined here 10 | X&& x = f(X{}); | ^ pr49974-c17.C:11:12: warning: ‘<anonymous>.X::i’ is used uninitialized [-Wuninitialized] 11 | return x.i; | ^ pr49974-c17.C:10:15: note: ‘<anonymous>’ declared here 10 | X&& x = f(X{}); | ^