diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/examples/panik.rs | 35 |
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(); +} |