rust/compiler
Chris Denton 8dd26cb195
Rollup merge of #140022 - dianne:box-deref-pats, r=Nadrieril
allow deref patterns to move out of boxes

This adds a case to lower deref patterns on boxes using a built-in deref instead of a `Deref::deref` or `DerefMut::deref_mut` call: if `deref!(inner): Box<T>` is matching on place `place`, the inner pattern `inner` now matches on `*place` rather than a temporary. No longer needing to call a method also means it won't borrow the scrutinee in match arms. This allows for bindings in `inner` to move out of `*place`.

For comparison with box patterns, this uses the same MIR lowering but different THIR. Consequently, deref patterns on boxes are treated the same as any other deref patterns in match exhaustiveness analysis. Box patterns can't quite be implemented in terms of deref patterns until exhaustiveness checking for deref patterns is implemented (I'll open a PR for exhaustiveness soon!).

Tracking issue: #87121

r? ``@Nadrieril``
2025-04-28 23:29:15 +00:00
..
rustc Revert "Use workspace lints for crates in compiler/ #138084" 2025-03-10 18:12:47 +08:00
rustc_abi Initial UnsafePinned/UnsafeUnpin impl [Part 1: Libs] 2025-04-13 01:11:04 -04:00
rustc_arena Remove #![warn(unreachable_pub)] from all compiler/ crates. 2025-03-11 13:14:21 +11:00
rustc_ast Auto merge of #140282 - matthiaskrgr:rollup-g6ze4jj, r=matthiaskrgr 2025-04-25 12:27:16 +00:00
rustc_ast_ir Use -Wunused_crate_dependencies for compiler crates. 2025-03-20 08:59:43 +11:00
rustc_ast_lowering Auto merge of #140282 - matthiaskrgr:rollup-g6ze4jj, r=matthiaskrgr 2025-04-25 12:27:16 +00:00
rustc_ast_passes Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_ast_pretty Inline and remove three pretty-printer methods. 2025-04-28 15:51:27 +10:00
rustc_attr_data_structures Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_attr_parsing Auto merge of #140282 - matthiaskrgr:rollup-g6ze4jj, r=matthiaskrgr 2025-04-25 12:27:16 +00:00
rustc_baked_icu_data Add unreachable_pub to RUSTC_LINT_FLAGS for compiler/ crates. 2025-03-11 13:14:21 +11:00
rustc_borrowck AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_builtin_macros Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_codegen_cranelift AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_codegen_gcc Merge commit '4f83a4258d' into subtree-update_cg_gcc_2025-04-25 2025-04-25 10:44:19 -04:00
rustc_codegen_llvm Rollup merge of #139308 - Shourya742:2025-03-29-add-autodiff-inline, r=ZuseZ4 2025-04-28 23:29:14 +00:00
rustc_codegen_ssa AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_const_eval Auto merge of #140388 - GuillaumeGomez:rollup-aj9o3ch, r=GuillaumeGomez 2025-04-28 17:22:11 +00:00
rustc_data_structures Update !DynSend and !DynSync platform impls 2025-04-21 21:23:32 -07:00
rustc_driver Remove recursion_limit increases. 2025-04-02 16:25:27 +11:00
rustc_driver_impl Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_error_codes stabilize naked_functions 2025-04-20 11:18:38 +02:00
rustc_error_messages update cfgs 2025-04-09 12:29:59 +01:00
rustc_errors Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_expand Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_feature Auto merge of #123948 - azhogin:azhogin/async-drop, r=oli-obk 2025-04-28 14:14:26 +00:00
rustc_fluent_macro Replace proc_macro::SourceFile by Span::{file, local_file}. 2025-04-11 15:07:08 +02:00
rustc_fs_util Retry if creating temp fails with access denied 2025-04-25 11:28:36 +00:00
rustc_graphviz Remove #![warn(unreachable_pub)] from all compiler/ crates. 2025-03-11 13:14:21 +11:00
rustc_hashes Revert "Use workspace lints for crates in compiler/ #138084" 2025-03-10 18:12:47 +08:00
rustc_hir AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_hir_analysis Rollup merge of #140249 - BoxyUwU:remove_weak_alias_terminology, r=oli-obk 2025-04-28 13:30:45 +02:00
rustc_hir_pretty Inline and remove three pretty-printer methods. 2025-04-28 15:51:27 +10:00
rustc_hir_typeck Rollup merge of #140022 - dianne:box-deref-pats, r=Nadrieril 2025-04-28 23:29:15 +00:00
rustc_incremental Replace infallible name_or_empty methods with fallible name methods. 2025-04-17 09:50:52 +10:00
rustc_index Add copy_within to IndexSlice 2025-04-15 10:44:28 -04:00
rustc_index_macros In rustc_mir_tranform, iterate over index newtypes instead of ints 2025-04-12 11:53:07 +00:00
rustc_infer Rollup merge of #140249 - BoxyUwU:remove_weak_alias_terminology, r=oli-obk 2025-04-28 13:30:45 +02:00
rustc_interface AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_lexer Replace rustc_lexer/unescape with rustc-literal-escaper crate 2025-04-04 14:44:45 +02:00
rustc_lint Auto merge of #140388 - GuillaumeGomez:rollup-aj9o3ch, r=GuillaumeGomez 2025-04-28 17:22:11 +00:00
rustc_lint_defs Update lint-docs to default to Rust 2024 2025-04-26 14:08:58 -07:00
rustc_llvm Rollup merge of #139308 - Shourya742:2025-03-29-add-autodiff-inline, r=ZuseZ4 2025-04-28 23:29:14 +00:00
rustc_log Use -Wunused_crate_dependencies for compiler crates. 2025-03-20 08:59:43 +11:00
rustc_macros Rollup merge of #140202 - est31:let_chains_feature_compiler, r=lcnr 2025-04-25 07:50:25 +02:00
rustc_metadata Rollup merge of #140086 - ChrisDenton:backoff, r=petrochenkov 2025-04-26 07:13:07 +02:00
rustc_middle Rollup merge of #140022 - dianne:box-deref-pats, r=Nadrieril 2025-04-28 23:29:15 +00:00
rustc_mir_build Rollup merge of #140022 - dianne:box-deref-pats, r=Nadrieril 2025-04-28 23:29:15 +00:00
rustc_mir_dataflow AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_mir_transform AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_monomorphize AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_next_trait_solver Auto merge of #140388 - GuillaumeGomez:rollup-aj9o3ch, r=GuillaumeGomez 2025-04-28 17:22:11 +00:00
rustc_parse Rollup merge of #140272 - Kivooeo:new-fix-four, r=est31 2025-04-26 07:13:08 +02:00
rustc_parse_format Update rustc-literal-escaper version to 0.0.2 2025-04-04 22:26:10 +02:00
rustc_passes Auto merge of #123948 - azhogin:azhogin/async-drop, r=oli-obk 2025-04-28 14:14:26 +00:00
rustc_pattern_analysis Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_privacy Rollup merge of #140249 - BoxyUwU:remove_weak_alias_terminology, r=oli-obk 2025-04-28 13:30:45 +02:00
rustc_query_impl Auto merge of #124141 - nnethercote:rm-Nonterminal-and-TokenKind-Interpolated, r=petrochenkov 2025-04-14 03:56:55 +00:00
rustc_query_system Auto merge of #139756 - Zoxc:out-of-order-dep-graph, r=oli-obk 2025-04-25 15:38:58 +00:00
rustc_resolve Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_sanitizers Make #![feature(let_chains)] bootstrap conditional in compiler/ 2025-04-23 16:40:30 +02:00
rustc_serialize Zero the buffer passed from write_with 2025-04-25 07:14:27 +02:00
rustc_session session: Cleanup CanonicalizedPath::new 2025-04-26 18:42:15 +03:00
rustc_smir Auto merge of #140388 - GuillaumeGomez:rollup-aj9o3ch, r=GuillaumeGomez 2025-04-28 17:22:11 +00:00
rustc_span Rollup merge of #139656 - scottmcm:stabilize-slice-as-chunks, r=dtolnay 2025-04-28 23:29:15 +00:00
rustc_symbol_mangling AsyncDrop implementation using shim codegen of async_drop_in_place::{closure}, scoped async drop added. 2025-04-28 16:23:13 +07:00
rustc_target Rollup merge of #140202 - est31:let_chains_feature_compiler, r=lcnr 2025-04-25 07:50:25 +02:00
rustc_trait_selection Auto merge of #140388 - GuillaumeGomez:rollup-aj9o3ch, r=GuillaumeGomez 2025-04-28 17:22:11 +00:00
rustc_traits Remove weak alias terminology 2025-04-24 11:59:20 +01:00
rustc_transmute transmutability: Support char, NonZeroXxx 2025-04-25 12:55:50 -07:00
rustc_ty_utils Auto merge of #140388 - GuillaumeGomez:rollup-aj9o3ch, r=GuillaumeGomez 2025-04-28 17:22:11 +00:00
rustc_type_ir Auto merge of #140388 - GuillaumeGomez:rollup-aj9o3ch, r=GuillaumeGomez 2025-04-28 17:22:11 +00:00
rustc_type_ir_macros Split TypeFolder and FallibleTypeFolder 2025-04-15 18:30:35 +00:00
stable_mir let rustc_smir host stable_mir for refactoring 2025-04-05 18:23:07 +08:00