On Sun, May 5, 2024 at 8:16 PM Andi Kleen <a...@linux.intel.com> wrote: > > gcc/ChangeLog: > > * doc/extend.texi: Document [[musttail]] > --- > gcc/doc/extend.texi | 22 ++++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi > index e290265d68d3..deb100ad93b6 100644 > --- a/gcc/doc/extend.texi > +++ b/gcc/doc/extend.texi > @@ -9839,7 +9839,7 @@ same manner as the @code{deprecated} attribute. > @section Statement Attributes > @cindex Statement Attributes > > -GCC allows attributes to be set on null statements. @xref{Attribute Syntax}, > +GCC allows attributes to be set on statements. @xref{Attribute Syntax}, > for details of the exact syntax for using attributes. Other attributes are > available for functions (@pxref{Function Attributes}), variables > (@pxref{Variable Attributes}), labels (@pxref{Label Attributes}), enumerators > @@ -9896,6 +9896,22 @@ foo (int x, int y) > @code{y} is not actually incremented and the compiler can but does not > have to optimize it to just @code{return 42 + 42;}. > > +@cindex @code{musttail} statement attribute > +@item musttail > + > +The @code{gnu::musttail} or @code{clang::musttail} attribute > +can be applied to a @code{return} statement with a return-value expression > +that is a function call. It asserts that the call must be a tail call that > +does not allocate extra stack space. > + > +@smallexample > +[[gnu::musttail]] return foo(); > +@end smallexample > + > +If the compiler cannot generate a tail call it generates > +an error. Tail calls generally require enabling optimization. > +On some targets they may not be supported.
Looks generally OK though does this mean people can debug programs using [[gnu::musttail]] only with optimized builds? It seems to me we should try harder to make [[gnu::musttail]] work at -O0 and generally behave the same at all optimization levels? > + > @end table > > @node Attribute Syntax > @@ -10019,7 +10035,9 @@ the constant expression, if present. > > @subsubheading Statement Attributes > In GNU C, an attribute specifier list may appear as part of a null > -statement. The attribute goes before the semicolon. > +statement. The attribute goes before the semicolon. > +Some attributes in new style syntax are also supported > +on non-null statements. > > @subsubheading Type Attributes > > -- > 2.44.0 >