From 414da9d66a5469e46a804611a2fc2a6fad543484 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Fri, 24 May 2019 01:45:47 +0000 Subject: [PATCH] Clarify how musttail can be used to create forwarding thunks llvm-svn: 361590 --- llvm/docs/LangRef.rst | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst index 5ea27c976..6311f6f 100644 --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -10006,12 +10006,16 @@ This instruction requires several arguments: recursive cycle in the call graph. #. Arguments with the :ref:`inalloca ` attribute are forwarded in place. + #. If the musttail call appears in a function with the ``"thunk"`` attribute + and the caller and callee both have varargs, than any unprototyped + arguments in register or memory are forwarded to the callee. Similarly, + the return value of the callee is returned the the caller's caller, even + if a void return type is in use. Both markers imply that the callee does not access allocas from the caller. The ``tail`` marker additionally implies that the callee does not access - varargs from the caller, while ``musttail`` implies that varargs from the - caller are passed to the callee. Calls marked ``musttail`` must obey the - following additional rules: + varargs from the caller. Calls marked ``musttail`` must obey the following + additional rules: - The call must immediately precede a :ref:`ret ` instruction, or a pointer bitcast followed by a ret instruction. -- 2.7.4