OK.
On Thu, Nov 24, 2016 at 4:47 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > Delayed folding caused following regression where we no longer warn about > returning reference to local variable. > > Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for > trunk? > > 2016-11-24 Jakub Jelinek <ja...@redhat.com> > > PR c++/77591 > * typeck.c (maybe_warn_about_returning_address_of_local): Optimize > whats_returned through fold_for_warn. > > * g++.dg/cpp1y/pr77591.C: New test. > > --- gcc/cp/typeck.c.jj 2016-11-15 09:57:00.000000000 +0100 > +++ gcc/cp/typeck.c 2016-11-24 11:37:30.732109019 +0100 > @@ -8612,7 +8612,7 @@ static bool > maybe_warn_about_returning_address_of_local (tree retval) > { > tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl)); > - tree whats_returned = retval; > + tree whats_returned = fold_for_warn (retval); > > for (;;) > { > --- gcc/testsuite/g++.dg/cpp1y/pr77591.C.jj 2016-11-24 11:41:03.867436090 > +0100 > +++ gcc/testsuite/g++.dg/cpp1y/pr77591.C 2016-11-24 11:42:04.428676591 > +0100 > @@ -0,0 +1,19 @@ > +// PR c++/77591 > +// { dg-do compile { target c++14 } } > +// { dg-options "-O0 -Wreturn-local-addr" } > + > +class A { }; > + > +decltype(auto) > +foo () > +{ > + A c; // { dg-warning "reference to local variable 'c' > returned" } > + return (c); > +} > + > +decltype(auto) > +bar () > +{ > + A c; // { dg-warning "reference to local variable 'c' > returned" } > + return 1==1 ? c : c; > +} > > Jakub