rust/compiler
bors 00755e4ca6 Auto merge of #96959 - nbdd0121:unwind, r=Amanieu
Prevent unwinding when `-C panic=abort` is used regardless declared ABI

Ensures that Rust code will abort with `-C panic=abort` regardless ABI used.
```rust
extern "C-unwind" {
    fn may_unwind();
}

// Will be nounwind with `-C panic=abort`, despite `C-unwind` ABI.
pub unsafe extern "C-unwind" fn rust_item_that_can_unwind() {
    may_unwind();
}
```

Current behaviour is that unwind will propagate through. While the current behaviour won't cause unsoundness it is inconsistent with the text reading of [RFC2945](https://rust-lang.github.io/rfcs/2945-c-unwind-abi.html).

I tweaked `fn_can_unwind` instead of tweaking `AbortUnwindingCalls` because this approach would allow Rust (non-direct) callers to also see that this function is nounwind, so it can prevent excessive landing pads generation.

For more discussions: https://rust-lang.zulipchat.com/#narrow/stream/210922-project-ffi-unwind/topic/soundness.20in.20mixed.20panic.20mode.

cc `@alexcrichton,` `@BatmanAoD`
r? `@Amanieu`

`@rustbot` label: T-compiler T-lang F-c_unwind
2022-05-17 15:04:50 +00:00
..
rustc
rustc_apfloat
rustc_arena
rustc_ast ast: Introduce some traits to get AST node properties generically 2022-05-11 12:43:27 +03:00
rustc_ast_lowering
rustc_ast_passes rustc: Stricter checking for #[link] attributes 2022-05-15 02:45:47 +03:00
rustc_ast_pretty ast: Introduce some traits to get AST node properties generically 2022-05-11 12:43:27 +03:00
rustc_attr only_local: always check for misuse 2022-05-10 12:07:35 +02:00
rustc_borrowck Change Successors to impl Iterator<Item = BasicBlock> 2022-05-17 08:41:01 +08:00
rustc_builtin_macros ast: Introduce some traits to get AST node properties generically 2022-05-11 12:43:27 +03:00
rustc_codegen_cranelift Merge commit '63734fcdd718cca089f84c42f3a42c0096cfd431' into sync_cg_clif-2022-05-15 2022-05-15 12:32:19 +02:00
rustc_codegen_gcc
rustc_codegen_llvm Add LLVM based mingw-w64 targets 2022-05-13 20:14:15 +02:00
rustc_codegen_ssa Change Successors to impl Iterator<Item = BasicBlock> 2022-05-17 08:41:01 +08:00
rustc_const_eval Auto merge of #97111 - JohnTitor:rollup-x3vjf6u, r=JohnTitor 2022-05-17 12:01:12 +00:00
rustc_data_structures
rustc_driver
rustc_error_codes rustc: Stricter checking for #[link] attributes 2022-05-15 02:45:47 +03:00
rustc_error_messages migrate maybe_recover_from_bad_type_plus diagnostic 2022-05-16 17:16:27 -05:00
rustc_errors errors: set_arg takes IntoDiagnosticArg 2022-05-12 07:21:51 +01:00
rustc_expand Use pluralize in one instance 2022-05-13 08:48:35 +02:00
rustc_feature change some attrs to only_local 2022-05-10 12:07:36 +02:00
rustc_fs_util
rustc_graphviz update graphviz links 2022-05-12 18:31:42 +09:00
rustc_hir rename visit item-like methods 2022-05-13 11:46:06 -04:00
rustc_hir_pretty
rustc_incremental rename visit item-like methods 2022-05-13 11:46:06 -04:00
rustc_index optimize insert_range method of IntervalSet 2022-05-10 19:27:40 +08:00
rustc_infer Rollup merge of #97080 - lcnr:relate-sus, r=oli-obk 2022-05-17 19:01:33 +09:00
rustc_interface only_local: always check for misuse 2022-05-10 12:07:35 +02:00
rustc_lexer
rustc_lint Auto merge of #97012 - oli-obk:🦀_intrinsics, r=davidtwco 2022-05-17 09:39:26 +00:00
rustc_lint_defs Allow the unused_macro_rules lint for now 2022-05-14 12:31:14 +02:00
rustc_llvm Add LLVM based mingw-w64 targets 2022-05-13 20:14:15 +02:00
rustc_log rustc_log: add env var to set verbose entry/exit behavior 2022-05-11 09:14:31 +02:00
rustc_macros errors: set_arg takes IntoDiagnosticArg 2022-05-12 07:21:51 +01:00
rustc_metadata Auto merge of #97012 - oli-obk:🦀_intrinsics, r=davidtwco 2022-05-17 09:39:26 +00:00
rustc_middle Auto merge of #96959 - nbdd0121:unwind, r=Amanieu 2022-05-17 15:04:50 +00:00
rustc_mir_build Auto merge of #96883 - jackh726:early-binder-2, r=oli-obk 2022-05-14 23:53:11 +00:00
rustc_mir_dataflow Auto merge of #97111 - JohnTitor:rollup-x3vjf6u, r=JohnTitor 2022-05-17 12:01:12 +00:00
rustc_mir_transform Auto merge of #97111 - JohnTitor:rollup-x3vjf6u, r=JohnTitor 2022-05-17 12:01:12 +00:00
rustc_monomorphize only_local: always check for misuse 2022-05-10 12:07:35 +02:00
rustc_parse keep bounds where they were 2022-05-16 22:23:32 -05:00
rustc_parse_format
rustc_passes Auto merge of #97012 - oli-obk:🦀_intrinsics, r=davidtwco 2022-05-17 09:39:26 +00:00
rustc_plugin_impl
rustc_privacy remove redundant branch 2022-05-13 11:46:06 -04:00
rustc_query_impl
rustc_query_system
rustc_resolve Auto merge of #97039 - cjgillot:no-rpit-hrtb, r=jackh726 2022-05-14 15:47:22 +00:00
rustc_save_analysis [save-analysis] Reference the variant not enum at struct-literal construction. 2022-05-12 16:34:02 -07:00
rustc_serialize
rustc_session rustc: Stricter checking for #[link] attributes 2022-05-15 02:45:47 +03:00
rustc_span Add unsigned_offset_from on pointers 2022-05-11 17:16:25 -07:00
rustc_symbol_mangling Auto merge of #96883 - jackh726:early-binder-2, r=oli-obk 2022-05-14 23:53:11 +00:00
rustc_target Add LLVM based mingw-w64 targets 2022-05-13 20:14:15 +02:00
rustc_trait_selection Auto merge of #96892 - oli-obk:🐌_obligation_cause_code_🐌, r=estebank 2022-05-17 01:46:25 +00:00
rustc_traits Add bound_impl_trait_ref 2022-05-13 18:27:40 -04:00
rustc_ty_utils Auto merge of #97012 - oli-obk:🦀_intrinsics, r=davidtwco 2022-05-17 09:39:26 +00:00
rustc_type_ir
rustc_typeck Auto merge of #97012 - oli-obk:🦀_intrinsics, r=davidtwco 2022-05-17 09:39:26 +00:00