]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
doc: Extend musttail attribute docs
authorJakub Jelinek <jakub@redhat.com>
Wed, 2 Apr 2025 10:36:29 +0000 (12:36 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 2 Apr 2025 10:36:29 +0000 (12:36 +0200)
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  <jakub@redhat.com>

* doc/extend.texi (musttail statement attribute): Hint how
to avoid -Wmaybe-musttail-local-addr warnings.

gcc/doc/extend.texi

index 9bf401b18a4d13718304bfe55f4aecbd695d863f..109c7d26ea28c71561f554551d86c5e33011bf85 100644 (file)
@@ -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