On Wed, 2 Apr 2025, Jakub Jelinek wrote: > On Wed, Apr 02, 2025 at 10:32:20AM +0200, Richard Biener wrote: > > I wonder if we can amend the documentation to suggest to end lifetime > > of variables explicitly by proper scoping? > > In the -Wmaybe-musttail-local-addr attribute description I've already > tried to show that in the example, but if you think something like > the following would make it clearer:
OK. Thanks, Richard. > 2025-04-02 Jakub Jelinek <ja...@redhat.com> > > * doc/extend.texi (musttail statement attribute): Hint how > to avoid -Wmaybe-musttail-local-addr warnings. > > --- gcc/doc/extend.texi.jj 2025-04-02 10:46:40.447281167 +0200 > +++ gcc/doc/extend.texi 2025-04-02 11:24:25.042027221 +0200 > @@ -9368,6 +9368,31 @@ baz (int *x) > @} > @} > @end smallexample > + > +To avoid the @option{-Wmaybe-musttail-local-addr} warning in the > +above @code{*x == 2} case and similar code, consider defining the > +maybe escaped variables in a separate scope which will end before the > +return statement if possible to make it clear that the variable is not > +live during the call. So > + > +@smallexample > + else if (*x == 2) > + @{ > + @{ > + int a = 42; > + bar (&a); > + @} > + /* The call will be tail called (would not be without the > + attribute), if bar stores the pointer anywhere, dereferencing > + it in foo will be undefined behavior and there will be a warning > + emitted for this with @option{-Wextra}, which implies > + @option{-Wmaybe-musttail-local-addr}. */ > + [[gnu::musttail]] return foo (nullptr); > + @} > +@end smallexample > + > +in this case. That is not possible if it is function argument which > +is address taken because those are in scope for the whole function. > @end table > > @node Attribute Syntax > > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)