https://gcc.gnu.org/g:a3e790a9c9fbb84c103c1407d9afd4beae10d512

commit r15-9147-ga3e790a9c9fbb84c103c1407d9afd4beae10d512
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Apr 2 12:36:29 2025 +0200

    doc: Extend musttail attribute docs
    
    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.
    
    2025-04-02  Jakub Jelinek  <ja...@redhat.com>
    
            * doc/extend.texi (musttail statement attribute): Hint how
            to avoid -Wmaybe-musttail-local-addr warnings.

Diff:
---
 gcc/doc/extend.texi | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 9bf401b18a4d..109c7d26ea28 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -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

Reply via email to