From 6e83797e4ed674e7e4180fcc683ac458fd3b4af2 Mon Sep 17 00:00:00 2001 From: Kyle J Strand Date: Fri, 25 Aug 2023 23:36:45 -0600 Subject: [PATCH] no-exceptions --- src/behavior-considered-undefined.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/behavior-considered-undefined.md b/src/behavior-considered-undefined.md index 72b5e8ab0..9a3b882c0 100644 --- a/src/behavior-considered-undefined.md +++ b/src/behavior-considered-undefined.md @@ -51,9 +51,12 @@ code. * Invoking undefined behavior via compiler intrinsics. * Executing code compiled with platform features that the current platform does not support (see [`target_feature`]), *except* if the platform explicitly documents this to be safe. -* Calling a function with the wrong call ABI or unwinding from a function with the wrong unwind ABI. +* Calling a function with the wrong call ABI or unwinding from a function with the wrong unwind ABI * Calling a foreign (e.g. C++) function that unwinds (`throw`s) via a function declaration or pointer declared with a non-unwinding ABI such as `"C"` +* Calling a Rust `extern` function that unwinds (with `extern "C-unwind"` or + another ABI that permits unwinding) from a runtime that does not support + unwinding, such as code compiled with GCC or Clang using `-fno-exceptions` * Deallocating a Rust stack frame without executing destructors for local variables owned by the stack frame. This can occur with C functions like `longjmp`.