1
Fork 0
rust/compiler/rustc_mir_transform/src
Matthias Krüger 434232f7b2
Rollup merge of #118426 - aDotInTheVoid:const-wat, r=compiler-errors,cjgillot
ConstProp: Correctly remove const if unknown value assigned to it.

Closes #118328

The problematic sequence of MIR is:

```rust
          _1 = const 0_usize;
          _1 = const _; // This is an associated constant we can't know before monomorphization.
          _0 = _1;
```

1. When `ConstProp::visit_assign` happens on `_1 = const 0_usize;`, it records that `0x0usize` is the value for `_1`.
2. Next `visit_assign` happens on `_1 = const _;`. Because the rvalue `.has_param()`, it can't be const evaled.
3. Finaly, `visit_assign` happens on `_0 = _1;`. Here it would think the value of `_1` was `0x0usize` from step 1.

The solution is to remove consts when checking the RValue fails, as they may have contained values that should now be invalidated, as that local was overwritten.

This should probably be back-ported to beta. Stable is more iffy, as it's gone unidentified since 1.70, so I only think it's worthwhile if there's another reason for a 1.74.1 release anyway.
2023-11-29 12:34:50 +01:00
..
coverage coverage: Assert that bcb0 starts with bb0 and has no in-edges 2023-11-25 12:29:21 +11:00
inline subst -> instantiate 2023-09-26 09:37:55 +02:00
abort_unwinding_calls.rs s/Generator/Coroutine/ 2023-10-20 21:10:38 +00:00
add_call_guards.rs when terminating during unwinding, show the reason why 2023-08-24 13:28:26 +02:00
add_moves_for_packed_drops.rs Remove DesugaringKind::Replace. 2023-05-25 17:40:46 +00:00
add_retag.rs cleanup misinformation regarding has_deref 2023-08-06 17:29:09 +03:00
add_subtyping_projections.rs move subtyper change reveal_all 2023-10-05 18:56:30 +03:00
check_alignment.rs Check alignment of pointers only when read/written through 2023-11-04 13:01:32 -04:00
check_const_item_mutation.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
check_packed_ref.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
check_unsafety.rs Rollup merge of #118333 - eduardosm:print-missing-target-features, r=est31 2023-11-29 12:34:50 +01:00
cleanup_post_borrowck.rs rename BorrowKind::Shallow to Fake 2023-11-08 22:55:28 +01:00
const_debuginfo.rs Format all the let chains in compiler 2023-10-13 08:59:36 +00:00
const_goto.rs rename mir::Constant -> mir::ConstOperand, mir::ConstKind -> mir::Const 2023-09-21 08:12:30 +02:00
const_prop.rs ConstProp: Remove const when rvalue check fails. 2023-11-28 22:15:11 +00:00
const_prop_lint.rs merge DefKind::Coroutine into DefKind::Closure 2023-11-26 21:05:08 +08:00
copy_prop.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
coroutine.rs Fix coroutine validation for mixed panic strategy 2023-11-28 21:11:24 +01:00
cost_checker.rs Re-format code with new rustfmt 2023-11-15 21:45:48 -05:00
cross_crate_inline.rs Add -Zcross-crate-inline-threshold=yes 2023-11-07 18:45:11 -05:00
ctfe_limit.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
dataflow_const_prop.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
dead_store_elimination.rs Preserve DebugInfo in DeadStoreElimination. 2023-10-06 15:46:11 +00:00
deduce_param_attrs.rs deduce_param_attrs: explain a read-only case 2023-10-30 10:29:08 +01:00
deduplicate_blocks.rs rename mir::Constant -> mir::ConstOperand, mir::ConstKind -> mir::Const 2023-09-21 08:12:30 +02:00
deref_separator.rs Remove mir::LocalDecl::internal. 2023-10-04 17:55:15 +00:00
dest_prop.rs s/generator/coroutine/ 2023-10-20 21:14:01 +00:00
dump_mir.rs Write to stdout if - is given as output file 2023-06-06 17:53:29 -04:00
early_otherwise_branch.rs add some comments explaining why MIR opts are marked as unsound 2023-10-10 11:17:27 +02:00
elaborate_box_derefs.rs Remove mir::LocalDecl::internal. 2023-10-04 17:55:15 +00:00
elaborate_drops.rs Remove unused arguments from on_all_children_bits. 2023-11-24 06:36:27 +11:00
errors.rs Print list of missing target features when calling a function with target features outside an unsafe block 2023-11-27 19:13:11 +01:00
ffi_unwind_calls.rs s/Generator/Coroutine/ 2023-10-20 21:10:38 +00:00
function_item_references.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
gvn.rs Begin nightly-ifying rustc_type_ir 2023-11-18 00:20:00 +00:00
inline.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
instsimplify.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
jump_threading.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
large_enums.rs add some comments explaining why MIR opts are marked as unsound 2023-10-10 11:17:27 +02:00
lib.rs merge DefKind::Coroutine into DefKind::Closure 2023-11-26 21:05:08 +08:00
lower_intrinsics.rs Remove option_payload_ptr; redundant to offset_of 2023-11-16 22:56:25 +00:00
lower_slice_len.rs Format all the let chains in compiler 2023-10-13 08:59:36 +00:00
match_branches.rs rename mir::Constant -> mir::ConstOperand, mir::ConstKind -> mir::Const 2023-09-21 08:12:30 +02:00
multiple_return_terminators.rs Remove unused TyCtxt from remove_dead_blocks 2023-10-18 23:42:45 +11:00
normalize_array_len.rs Format all the let chains in compiler 2023-10-13 08:59:36 +00:00
nrvo.rs add some comments explaining why MIR opts are marked as unsound 2023-10-10 11:17:27 +02:00
pass_manager.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
prettify.rs make reorder BB pass use cached RPO 2023-06-14 20:08:04 +00:00
ref_prop.rs Format all the let chains in compiler 2023-10-13 08:59:36 +00:00
remove_noop_landing_pads.rs s/Generator/Coroutine/ 2023-10-20 21:10:38 +00:00
remove_place_mention.rs Actually keep PlaceMention if requested. 2023-04-21 21:34:59 +00:00
remove_storage_markers.rs Make MIR basic blocks field public 2022-07-07 08:11:49 +02:00
remove_uninit_drops.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
remove_unneeded_drops.rs inline format!() args from rustc_codegen_llvm to the end (4) 2023-07-25 23:20:28 +02:00
remove_zsts.rs Remove incorrect transformation from RemoveZsts 2023-11-11 01:51:09 +01:00
required_consts.rs rename mir::Constant -> mir::ConstOperand, mir::ConstKind -> mir::Const 2023-09-21 08:12:30 +02:00
reveal_all.rs move subtyper change reveal_all 2023-10-05 18:56:30 +03:00
separate_const_switch.rs s/Generator/Coroutine/ 2023-10-20 21:10:38 +00:00
shim.rs Fix coroutine validation for mixed panic strategy 2023-11-28 21:11:24 +01:00
simplify.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
simplify_branches.rs Simplify assume of a constant. 2023-10-31 11:44:23 +00:00
simplify_comparison_integral.rs rename mir::Constant -> mir::ConstOperand, mir::ConstKind -> mir::Const 2023-09-21 08:12:30 +02:00
sroa.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
ssa.rs Fix def-use check for call terminators 2023-11-14 17:07:34 +01:00
uninhabited_enum_branching.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
unreachable_prop.rs Only emit != assumptions if the otherwise target is reachable. 2023-10-31 11:44:23 +00:00