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)

Reply via email to