about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorAmanieu d'Antras <amanieu@gmail.com>2020-01-10 00:19:40 +0000
committerAmanieu d'Antras <amanieu@gmail.com>2020-01-11 10:18:44 +0000
commit3a025760be8f4c56f0777fa34ba64a4f7bada8e7 (patch)
treee9123f65a83caf1dea1e924a64963f99f9d22f84 /src/libstd
parent757ed07f374edfe93be5c9084ac5c44ba738e1b2 (diff)
downloadrust-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.rs8
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,