Don't validate constants before propagation
Validation is neither necessary nor desirable. The validation is already omitted at mir-opt-level >= 3, so there there are not changes in MIR test output (the propagation of invalid constants is covered by an existing test in tests/mir-opt/const_prop/invalid_constant.rs).
This commit is contained in:
parent
9c044d77a3
commit
6a8fcdc597
@ -22,9 +22,9 @@
|
|||||||
|
|
||||||
use crate::MirPass;
|
use crate::MirPass;
|
||||||
use rustc_const_eval::interpret::{
|
use rustc_const_eval::interpret::{
|
||||||
self, compile_time_machine, AllocId, ConstAllocation, ConstValue, CtfeValidationMode, Frame,
|
self, compile_time_machine, AllocId, ConstAllocation, ConstValue, Frame, ImmTy, Immediate,
|
||||||
ImmTy, Immediate, InterpCx, InterpResult, LocalValue, MemoryKind, OpTy, PlaceTy, Pointer,
|
InterpCx, InterpResult, LocalValue, MemoryKind, OpTy, PlaceTy, Pointer, Scalar,
|
||||||
Scalar, StackPopCleanup,
|
StackPopCleanup,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The maximum number of bytes that we'll allocate space for a local or the return value.
|
/// The maximum number of bytes that we'll allocate space for a local or the return value.
|
||||||
@ -628,18 +628,6 @@ fn replace_with_const(&mut self, place: Place<'tcx>, rval: &mut Rvalue<'tcx>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
trace!("attempting to replace {:?} with {:?}", rval, value);
|
trace!("attempting to replace {:?} with {:?}", rval, value);
|
||||||
if let Err(e) = self.ecx.const_validate_operand(
|
|
||||||
value,
|
|
||||||
vec![],
|
|
||||||
// FIXME: is ref tracking too expensive?
|
|
||||||
// FIXME: what is the point of ref tracking if we do not even check the tracked refs?
|
|
||||||
&mut interpret::RefTracking::empty(),
|
|
||||||
CtfeValidationMode::Regular,
|
|
||||||
) {
|
|
||||||
trace!("validation error, attempt failed: {:?}", e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME> figure out what to do when read_immediate_raw fails
|
// FIXME> figure out what to do when read_immediate_raw fails
|
||||||
let imm = self.ecx.read_immediate_raw(value).ok();
|
let imm = self.ecx.read_immediate_raw(value).ok();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user