diff options
| author | Amanieu d'Antras <amanieu@gmail.com> | 2020-01-10 00:19:40 +0000 |
|---|---|---|
| committer | Amanieu d'Antras <amanieu@gmail.com> | 2020-01-11 10:18:44 +0000 |
| commit | 3a025760be8f4c56f0777fa34ba64a4f7bada8e7 (patch) | |
| tree | e9123f65a83caf1dea1e924a64963f99f9d22f84 /src/libstd | |
| parent | 757ed07f374edfe93be5c9084ac5c44ba738e1b2 (diff) | |
| download | rust-3a025760be8f4c56f0777fa34ba64a4f7bada8e7.tar.gz rust-3a025760be8f4c56f0777fa34ba64a4f7bada8e7.zip | |
Abort if C++ tries to swallow a Rust panic
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/panicking.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libstd/panicking.rs b/src/libstd/panicking.rs index 599ccc809be..43c2965f231 100644 --- a/src/libstd/panicking.rs +++ b/src/libstd/panicking.rs @@ -55,6 +55,14 @@ extern "C" { fn __rust_start_panic(payload: usize) -> u32; } +/// This function is called by the panic runtime if FFI code catches a Rust +/// panic but doesn't rethrow it. We don't support this case since it messes +/// with our panic count. +#[rustc_std_internal_symbol] +extern "C" fn __rust_drop_panic() -> ! { + rtabort!("Rust panics must be rethrown"); +} + #[derive(Copy, Clone)] enum Hook { Default, |
