rust/compiler
Matthias Krüger 9d7c8edd6c
Rollup merge of #92828 - Amanieu:unwind-abort, r=dtolnay
Print a helpful message if unwinding aborts when it reaches a nounwind function

This is implemented by routing `TerminatorKind::Abort` back through the panic handler, but with a special flag in the `PanicInfo` which indicates that the panic handler should *not* attempt to unwind the stack and should instead abort immediately.

This is useful for the planned change in https://github.com/rust-lang/lang-team/issues/97 which would make `Drop` impls `nounwind` by default.

### Code

```rust
#![feature(c_unwind)]

fn panic() {
    panic!()
}

extern "C" fn nounwind() {
    panic();
}

fn main() {
    nounwind();
}
```

### Before

```
$ ./test
thread 'main' panicked at 'explicit panic', test.rs:4:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Illegal instruction (core dumped)
```

### After

```
$ ./test
thread 'main' panicked at 'explicit panic', test.rs:4:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at 'panic in a function that cannot unwind', test.rs:7:1
stack backtrace:
   0:     0x556f8f86ec9b - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hdccefe11a6ac4396
   1:     0x556f8f88ac6c - core::fmt::write::he152b28c41466ebb
   2:     0x556f8f85d6e2 - std::io::Write::write_fmt::h0c261480ab86f3d3
   3:     0x556f8f8654fa - std::panicking::default_hook::{{closure}}::h5d7346f3ff7f6c1b
   4:     0x556f8f86512b - std::panicking::default_hook::hd85803a1376cac7f
   5:     0x556f8f865a91 - std::panicking::rust_panic_with_hook::h4dc1c5a3036257ac
   6:     0x556f8f86f079 - std::panicking::begin_panic_handler::{{closure}}::hdda1d83c7a9d34d2
   7:     0x556f8f86edc4 - std::sys_common::backtrace::__rust_end_short_backtrace::h5b70ed0cce71e95f
   8:     0x556f8f865592 - rust_begin_unwind
   9:     0x556f8f85a764 - core::panicking::panic_no_unwind::h2606ab3d78c87899
  10:     0x556f8f85b910 - test::nounwind::hade6c7ee65050347
  11:     0x556f8f85b936 - test::main::hdc6e02cb36343525
  12:     0x556f8f85b7e3 - core::ops::function::FnOnce::call_once::h4d02663acfc7597f
  13:     0x556f8f85b739 - std::sys_common::backtrace::__rust_begin_short_backtrace::h071d40135adb0101
  14:     0x556f8f85c149 - std::rt::lang_start::{{closure}}::h70dbfbf38b685e93
  15:     0x556f8f85c791 - std::rt::lang_start_internal::h798f1c0268d525aa
  16:     0x556f8f85c131 - std::rt::lang_start::h476a7ee0a0bb663f
  17:     0x556f8f85b963 - main
  18:     0x7f64c0822b25 - __libc_start_main
  19:     0x556f8f85ae8e - _start
  20:                0x0 - <unknown>
thread panicked while panicking. aborting.
Aborted (core dumped)
```
2022-01-22 15:32:49 +01:00
..
rustc Remove useless #[global_allocator] from rustc and rustdoc. 2021-12-23 17:23:21 +11:00
rustc_apfloat Stabilize iter::zip. 2021-12-14 18:50:31 -04:00
rustc_arena Add some comments. 2021-11-19 07:52:59 +11:00
rustc_ast Auto merge of #91359 - dtolnay:args, r=Mark-Simulacrum 2022-01-21 06:20:18 +00:00
rustc_ast_lowering Remove a span from hir::ExprKind::MethodCall 2022-01-21 07:48:10 -06:00
rustc_ast_passes Auto merge of #92896 - lqd:update-deps, r=Mark-Simulacrum 2022-01-21 10:38:30 +00:00
rustc_ast_pretty Deduplicate branches of print_break implementation 2022-01-19 19:04:36 -08:00
rustc_attr Remove unnecessary sigils around Symbol::as_str() calls. 2021-12-15 17:32:14 +11:00
rustc_borrowck Rollup merge of #92467 - Aaron1011:extern-local-region, r=oli-obk 2022-01-21 22:03:12 +01:00
rustc_builtin_macros Fix comment about spans during borrowck per PR 91359 review 2022-01-17 10:38:30 -08:00
rustc_codegen_cranelift remove is_noop 2022-01-19 13:58:29 +01:00
rustc_codegen_gcc Use Symbol for target features in asm handling 2022-01-17 18:06:27 +01:00
rustc_codegen_llvm Rollup merge of #93046 - est31:let_else, r=davidtwco 2022-01-21 22:03:17 +01:00
rustc_codegen_ssa Rollup merge of #92828 - Amanieu:unwind-abort, r=dtolnay 2022-01-22 15:32:49 +01:00
rustc_const_eval update comments 2022-01-20 14:50:35 +01:00
rustc_data_structures Auto merge of #92740 - cuviper:update-rayons, r=Mark-Simulacrum 2022-01-16 08:12:23 +00:00
rustc_driver Rollup merge of #91606 - joshtriplett:stabilize-print-link-args, r=pnkfelix 2022-01-20 17:10:32 +01:00
rustc_error_codes Rollup merge of #92752 - jamestiotio:error-codes-typos, r=nagisa 2022-01-17 20:07:04 +01:00
rustc_errors Auto merge of #92070 - rukai:replace_vec_into_iter_with_array_into_iter, r=Mark-Simulacrum 2022-01-11 14:23:24 +00:00
rustc_expand Auto merge of #92473 - petrochenkov:ltrattr2, r=Aaron1011 2022-01-17 02:06:54 +00:00
rustc_feature Formally implement let chains 2022-01-18 19:38:17 -03:00
rustc_fs_util Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_graphviz eplace usages of vec![].into_iter with [].into_iter 2022-01-09 14:09:25 +11:00
rustc_hir Rollup merge of #92828 - Amanieu:unwind-abort, r=dtolnay 2022-01-22 15:32:49 +01:00
rustc_hir_pretty Remove a span from hir::ExprKind::MethodCall 2022-01-21 07:48:10 -06:00
rustc_incremental Auto merge of #92896 - lqd:update-deps, r=Mark-Simulacrum 2022-01-21 10:38:30 +00:00
rustc_index remove unused FIXME 2022-01-12 16:09:01 +01:00
rustc_infer Remove a span from hir::ExprKind::MethodCall 2022-01-21 07:48:10 -06:00
rustc_interface Rollup merge of #93046 - est31:let_else, r=davidtwco 2022-01-21 22:03:17 +01:00
rustc_lexer Auto merge of #91393 - Julian-Wollersberger:lexer_optimization, r=petrochenkov 2021-12-03 13:20:14 +00:00
rustc_lint Remove a span from hir::ExprKind::MethodCall 2022-01-21 07:48:10 -06:00
rustc_lint_defs Fix lints documents 2022-01-13 03:57:44 +00:00
rustc_llvm Remove LLVMRustMarkAllFunctionsNounwind 2022-01-14 00:36:12 +00:00
rustc_log Make rustc_log doc test runnable 2022-01-03 22:31:56 -08:00
rustc_macros Rollup merge of #92011 - Aaron1011:decode-span, r=michaelwoerister 2022-01-03 14:44:16 +01:00
rustc_metadata Rollup merge of #90782 - ricobbe:binutils-dlltool, r=michaelwoerister 2022-01-18 22:00:42 +01:00
rustc_middle Auto merge of #93138 - matthiaskrgr:rollup-m8akifd, r=matthiaskrgr 2022-01-21 03:04:43 +00:00
rustc_mir_build Rollup merge of #93046 - est31:let_else, r=davidtwco 2022-01-21 22:03:17 +01:00
rustc_mir_dataflow Remove deprecated LLVM-style inline assembly 2022-01-12 18:51:31 +01:00
rustc_mir_transform Auto merge of #92896 - lqd:update-deps, r=Mark-Simulacrum 2022-01-21 10:38:30 +00:00
rustc_monomorphize Change TerminatorKind::Abort to call the panic handler instead of 2022-01-17 00:39:34 +00:00
rustc_parse Rollup merge of #91150 - dtolnay:qpath, r=davidtwco 2022-01-18 22:00:43 +01:00
rustc_parse_format Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_passes Rollup merge of #91032 - eholk:generator-drop-tracking, r=nikomatsakis 2022-01-20 23:37:29 +01:00
rustc_plugin_impl replace dynamic library module with libloading 2021-12-06 12:03:47 -05:00
rustc_privacy Remove a span from hir::ExprKind::MethodCall 2022-01-21 07:48:10 -06:00
rustc_query_impl Show a more informative panic message when DefPathHash does not exist 2022-01-19 17:36:44 -05:00
rustc_query_system Auto merge of #92740 - cuviper:update-rayons, r=Mark-Simulacrum 2022-01-16 08:12:23 +00:00
rustc_resolve Rollup merge of #93046 - est31:let_else, r=davidtwco 2022-01-21 22:03:17 +01:00
rustc_save_analysis Remove a span from hir::ExprKind::MethodCall 2022-01-21 07:48:10 -06:00
rustc_serialize Auto merge of #92604 - nnethercote:optimize-impl_read_unsigned_leb128, r=michaelwoerister 2022-01-15 07:27:30 +00:00
rustc_session Gate l4-bender linker flavor 2022-01-21 16:51:10 +01:00
rustc_span Rollup merge of #92828 - Amanieu:unwind-abort, r=dtolnay 2022-01-22 15:32:49 +01:00
rustc_symbol_mangling Rollup merge of #92316 - petrochenkov:extmangle, r=wesleywiser 2022-01-19 19:19:45 +01:00
rustc_target adapt L4Bender implementation 2022-01-21 16:50:33 +01:00
rustc_trait_selection Rollup merge of #93046 - est31:let_else, r=davidtwco 2022-01-21 22:03:17 +01:00
rustc_traits ⬆ chalk to 0.76.0 2022-01-19 13:44:43 -06:00
rustc_ty_utils Auto merge of #92805 - BoxyUwU:revert-lazy-anon-const-substs, r=lcnr 2022-01-16 11:19:21 +00:00
rustc_type_ir initial revert 2022-01-15 01:16:55 +00:00
rustc_typeck Rollup merge of #92963 - terrarier2111:tuple-diagnostic, r=davidtwco 2022-01-21 22:03:16 +01:00