rust/compiler/rustc_mir_transform/src
Matthias Krüger 2fd3007cbc
Rollup merge of #130514 - compiler-errors:unsafe-binders, r=oli-obk
Implement MIR lowering for unsafe binders

This is the final bit of the unsafe binders puzzle. It implements MIR, CTFE, and codegen for unsafe binders, and enforces that (for now) they are `Copy`. Later on, I'll introduce a new trait that relaxes this requirement to being "is `Copy` or `ManuallyDrop<T>`" which more closely models how we treat union fields.

Namely, wrapping unsafe binders is now `Rvalue::WrapUnsafeBinder`, which acts much like an `Rvalue::Aggregate`. Unwrapping unsafe binders are implemented as a MIR projection `ProjectionElem::UnwrapUnsafeBinder`, which acts much like `ProjectionElem::Field`.

Tracking:
- https://github.com/rust-lang/rust/issues/130516
2025-02-01 16:41:03 +01:00
..
coroutine Re-export more rustc_span::symbol things from rustc_span. 2024-12-18 13:38:53 +11:00
coverage Incorporate iter_nodes into graph::DirectedGraph 2025-01-26 14:08:42 +11:00
inline use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
shim Represent the raw pointer for a array length check as a new kind of fake borrow 2025-01-28 00:00:33 +00:00
abort_unwinding_calls.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
add_call_guards.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
add_moves_for_packed_drops.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
add_retag.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
add_subtyping_projections.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
check_alignment.rs Refactor PointerFinder into a separate module 2025-01-30 10:08:37 +00:00
check_call_recursion.rs Consolidate ad-hoc MIR lints into real pass-manager-based MIR lints 2025-01-18 21:25:47 +00:00
check_const_item_mutation.rs Move find_self_call. 2025-01-31 16:04:13 +11:00
check_inline.rs Consolidate ad-hoc MIR lints into real pass-manager-based MIR lints 2025-01-18 21:25:47 +00:00
check_null.rs Insert null checks for pointer dereferences when debug assertions are enabled 2025-01-31 11:13:34 +00:00
check_packed_ref.rs use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
check_pointers.rs Insert null checks for pointer dereferences when debug assertions are enabled 2025-01-31 11:13:34 +00:00
check_undefined_transmutes.rs Add a Lint for Pointer to Integer Transmutes in Consts 2024-10-05 12:48:02 +00:00
cleanup_post_borrowck.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
copy_prop.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
coroutine.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
cost_checker.rs use TypingEnv when no infcx is available 2024-11-18 10:38:56 +01:00
cross_crate_inline.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
ctfe_limit.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
dataflow_const_prop.rs Implement MIR, CTFE, and codegen for unsafe binders 2025-01-31 17:19:53 +00:00
dead_store_elimination.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
deduce_param_attrs.rs rename BitSet to DenseBitSet 2025-01-11 11:34:01 +00:00
deduplicate_blocks.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
deref_separator.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
dest_prop.rs Implement MIR, CTFE, and codegen for unsafe binders 2025-01-31 17:19:53 +00:00
dump_mir.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
early_otherwise_branch.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
elaborate_box_derefs.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
elaborate_drops.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
errors.rs Remove redundant to_ident_string calls 2025-01-27 01:23:34 +00:00
ffi_unwind_calls.rs compiler: Directly use rustc_abi in mir_transform 2024-11-03 13:38:47 -08:00
function_item_references.rs Remove redundant to_ident_string calls 2025-01-27 01:23:34 +00:00
gvn.rs Implement MIR, CTFE, and codegen for unsafe binders 2025-01-31 17:19:53 +00:00
impossible_predicates.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
inline.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
instsimplify.rs Reapply "Auto merge of #133734 - scottmcm:lower-indexing-to-ptrmetadata, r=davidtwco,RalfJung" 2025-01-27 23:42:47 +00:00
jump_threading.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
known_panics_lint.rs Implement MIR, CTFE, and codegen for unsafe binders 2025-01-31 17:19:53 +00:00
large_enums.rs Represent the raw pointer for a array length check as a new kind of fake borrow 2025-01-28 00:00:33 +00:00
lib.rs Auto merge of #136350 - matthiaskrgr:rollup-6eqfyvh, r=matthiaskrgr 2025-01-31 20:16:46 +00:00
lint_tail_expr_drop_order.rs remove more redundant into() conversions 2025-01-10 07:08:28 +01:00
lint.rs rename BitSet to DenseBitSet 2025-01-11 11:34:01 +00:00
lower_intrinsics.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
lower_slice_len.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
match_branches.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
mentioned_items.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
multiple_return_terminators.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
nrvo.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
pass_manager.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
post_analysis_normalize.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
post_drop_elaboration.rs Make check_live_drops into a MirLint. 2024-09-10 09:11:17 +10:00
prettify.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
promote_consts.rs Implement MIR, CTFE, and codegen for unsafe binders 2025-01-31 17:19:53 +00:00
ref_prop.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
remove_noop_landing_pads.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
remove_place_mention.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
remove_storage_markers.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
remove_uninit_drops.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
remove_unneeded_drops.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
remove_zsts.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
required_consts.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
sanity_check.rs Move MirPass to rustc_mir_transform. 2024-09-03 16:03:46 +10:00
shim.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
simplify_branches.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
simplify_comparison_integral.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
simplify.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
single_use_consts.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
sroa.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
ssa.rs rename BitSet to DenseBitSet 2025-01-11 11:34:01 +00:00
strip_debuginfo.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
unreachable_enum_branching.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
unreachable_prop.rs Disable non-required MIR opts with optimize(none) 2025-01-23 17:40:41 +00:00
validate.rs Validation 2025-01-31 17:40:28 +00:00