[const-prop] Fix ICE when casting function pointers
This fixes an ICE when building libcore with `-Z mir-opt-level=3`.
This commit is contained in:
parent
daf1ed0e98
commit
529b94ea6a
2 changed files with 29 additions and 6 deletions
|
|
@ -525,12 +525,10 @@ impl<'a, 'mir, 'tcx> ConstPropagator<'a, 'mir, 'tcx> {
|
|||
source_info: SourceInfo,
|
||||
) {
|
||||
trace!("attepting to replace {:?} with {:?}", rval, value);
|
||||
self.ecx.validate_operand(
|
||||
value,
|
||||
vec![],
|
||||
None,
|
||||
true,
|
||||
).expect("value should already be a valid const");
|
||||
if let Err(e) = self.ecx.validate_operand(value, vec![], None, true) {
|
||||
trace!("validation error, attempt failed: {:?}", e);
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME> figure out what tho do when try_read_immediate fails
|
||||
let imm = self.use_ecx(source_info, |this| {
|
||||
|
|
|
|||
25
src/test/mir-opt/const_prop/reify_fn_ptr.rs
Normal file
25
src/test/mir-opt/const_prop/reify_fn_ptr.rs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
fn main() {
|
||||
let _ = main as usize as *const fn();
|
||||
}
|
||||
|
||||
// END RUST SOURCE
|
||||
// START rustc.main.ConstProp.before.mir
|
||||
// bb0: {
|
||||
// ...
|
||||
// _3 = const main as fn() (Pointer(ReifyFnPointer));
|
||||
// _2 = move _3 as usize (Misc);
|
||||
// ...
|
||||
// _1 = move _2 as *const fn() (Misc);
|
||||
// ...
|
||||
// }
|
||||
// END rustc.main.ConstProp.before.mir
|
||||
// START rustc.main.ConstProp.after.mir
|
||||
// bb0: {
|
||||
// ...
|
||||
// _3 = const Scalar(AllocId(1).0x0) : fn();
|
||||
// _2 = move _3 as usize (Misc);
|
||||
// ...
|
||||
// _1 = const Scalar(AllocId(1).0x0) : *const fn();
|
||||
// ...
|
||||
// }
|
||||
// END rustc.main.ConstProp.after.mir
|
||||
Loading…
Add table
Add a link
Reference in a new issue