[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
This commit is contained in:
cynecx 2021-05-31 09:00:35 +01:00 committed by Amanieu d'Antras
parent 7d7b72bad7
commit 22f635b1b3
1 changed files with 14 additions and 3 deletions

View File

@ -4303,9 +4303,20 @@ the only supported dialects. An example is:
call void asm inteldialect "eieio", ""() call void asm inteldialect "eieio", ""()
If multiple keywords appear the '``sideeffect``' keyword must come In the case that the inline asm might unwind the stack,
first, the '``alignstack``' keyword second and the '``inteldialect``' the '``unwind``' keyword must be used, so that the compiler emits
keyword last. 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 Inline Asm Constraint String
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^