From be221f0b41006cc59b98e465a450ef664ed446b5 Mon Sep 17 00:00:00 2001 From: cynecx Date: Mon, 31 May 2021 09:00:35 +0100 Subject: [PATCH] [LangRef] update according to unwinding support in inline asm https://reviews.llvm.org/D95745 introduced a new `unwind` keyword for inline assembler expressions. Inline asms marked with the `unwind` keyword allows stack unwinding from inline assembly because the compiler emits unwinding information ("around" the inline asm) as it would for calls/invokes. Unwinding the stack from within non-unwind inline asm may cause UB. Reviewed By: Amanieu Differential Revision: https://reviews.llvm.org/D102642 --- docs/LangRef.rst | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/LangRef.rst b/docs/LangRef.rst index 6d6c72cbb66..0dc0b53925d 100644 --- a/docs/LangRef.rst +++ b/docs/LangRef.rst @@ -4303,9 +4303,20 @@ the only supported dialects. An example is: call void asm inteldialect "eieio", ""() -If multiple keywords appear the '``sideeffect``' keyword must come -first, the '``alignstack``' keyword second and the '``inteldialect``' -keyword last. +In the case that the inline asm might unwind the stack, +the '``unwind``' keyword must be used, so that the compiler emits +unwinding information: + +.. code-block:: llvm + + call void asm unwind "call func", ""() + +If the inline asm unwinds the stack and isn't marked with +the '``unwind``' keyword, the behavior is undefined. + +If multiple keywords appear, the '``sideeffect``' keyword must come +first, the '``alignstack``' keyword second, the '``inteldialect``' keyword +third and the '``unwind``' keyword last. Inline Asm Constraint String ^^^^^^^^^^^^^^^^^^^^^^^^^^^^