summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/examples/panik.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/core/examples/panik.rs b/core/examples/panik.rs
new file mode 100644
index 000000000..23efcbb3b
--- /dev/null
+++ b/core/examples/panik.rs
@@ -0,0 +1,35 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+//! This example shows that op-panics currently result in UB (likely "failed to initiate panic")
+//! without a custom panic hook that aborts the process or -C panic=abort.
+//!
+//! This happens due to the UB of panicking in an extern "C",
+//! given how ops are reduced via rusty_v8::MapFnTo
+//! See:
+//! - https://github.com/rust-lang/rust/issues/74990
+//! - https://rust-lang.github.io/rfcs/2945-c-unwind-abi.html
+
+use deno_core::op;
+use deno_core::Extension;
+use deno_core::JsRuntime;
+use deno_core::RuntimeOptions;
+
+// This is a hack to make the `#[op]` macro work with
+// deno_core examples.
+// You can remove this:
+use deno_core::*;
+
+fn main() {
+ #[op]
+ fn op_panik() {
+ panic!("panik !!!")
+ }
+
+ let extensions =
+ vec![Extension::builder().ops(vec![op_panik::decl()]).build()];
+ let mut rt = JsRuntime::new(RuntimeOptions {
+ extensions,
+ ..Default::default()
+ });
+ rt.execute_script("panik", "Deno.core.ops.op_panik()")
+ .unwrap();
+}