Auto merge of #9241 - Jarcho:ice_9238, r=xFrednet
Fix ICE in `miri_to_const` fixes #9238 changelog: Fix ICE when using `#![feature(generic_const_exprs)]` in various lints
This commit is contained in:
commit
d72e5f2e10
@ -619,32 +619,24 @@ pub fn miri_to_const<'tcx>(tcx: TyCtxt<'tcx>, result: mir::ConstantKind<'tcx>) -
|
|||||||
},
|
},
|
||||||
mir::ConstantKind::Val(ConstValue::ByRef { alloc, offset: _ }, _) => match result.ty().kind() {
|
mir::ConstantKind::Val(ConstValue::ByRef { alloc, offset: _ }, _) => match result.ty().kind() {
|
||||||
ty::Array(sub_type, len) => match sub_type.kind() {
|
ty::Array(sub_type, len) => match sub_type.kind() {
|
||||||
ty::Float(FloatTy::F32) => match len.to_valtree().try_to_machine_usize(tcx) {
|
ty::Float(FloatTy::F32) => match len.kind().try_to_machine_usize(tcx) {
|
||||||
Some(len) => alloc
|
Some(len) => alloc
|
||||||
.inner()
|
.inner()
|
||||||
.inspect_with_uninit_and_ptr_outside_interpreter(0..(4 * usize::try_from(len).unwrap()))
|
.inspect_with_uninit_and_ptr_outside_interpreter(0..(4 * usize::try_from(len).unwrap()))
|
||||||
.to_owned()
|
.to_owned()
|
||||||
.chunks(4)
|
.array_chunks::<4>()
|
||||||
.map(|chunk| {
|
.map(|&chunk| Some(Constant::F32(f32::from_le_bytes(chunk))))
|
||||||
Some(Constant::F32(f32::from_le_bytes(
|
|
||||||
chunk.try_into().expect("this shouldn't happen"),
|
|
||||||
)))
|
|
||||||
})
|
|
||||||
.collect::<Option<Vec<Constant>>>()
|
.collect::<Option<Vec<Constant>>>()
|
||||||
.map(Constant::Vec),
|
.map(Constant::Vec),
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
ty::Float(FloatTy::F64) => match len.to_valtree().try_to_machine_usize(tcx) {
|
ty::Float(FloatTy::F64) => match len.kind().try_to_machine_usize(tcx) {
|
||||||
Some(len) => alloc
|
Some(len) => alloc
|
||||||
.inner()
|
.inner()
|
||||||
.inspect_with_uninit_and_ptr_outside_interpreter(0..(8 * usize::try_from(len).unwrap()))
|
.inspect_with_uninit_and_ptr_outside_interpreter(0..(8 * usize::try_from(len).unwrap()))
|
||||||
.to_owned()
|
.to_owned()
|
||||||
.chunks(8)
|
.array_chunks::<8>()
|
||||||
.map(|chunk| {
|
.map(|&chunk| Some(Constant::F64(f64::from_le_bytes(chunk))))
|
||||||
Some(Constant::F64(f64::from_le_bytes(
|
|
||||||
chunk.try_into().expect("this shouldn't happen"),
|
|
||||||
)))
|
|
||||||
})
|
|
||||||
.collect::<Option<Vec<Constant>>>()
|
.collect::<Option<Vec<Constant>>>()
|
||||||
.map(Constant::Vec),
|
.map(Constant::Vec),
|
||||||
_ => None,
|
_ => None,
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#![feature(array_chunks)]
|
||||||
#![feature(box_patterns)]
|
#![feature(box_patterns)]
|
||||||
#![feature(control_flow_enum)]
|
#![feature(control_flow_enum)]
|
||||||
#![feature(let_else)]
|
#![feature(let_else)]
|
||||||
|
12
tests/ui/crashes/ice-9238.rs
Normal file
12
tests/ui/crashes/ice-9238.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#![allow(incomplete_features)]
|
||||||
|
#![feature(generic_const_exprs)]
|
||||||
|
#![warn(clippy::branches_sharing_code)]
|
||||||
|
|
||||||
|
const fn f() -> usize {
|
||||||
|
2
|
||||||
|
}
|
||||||
|
const C: [f64; f()] = [0f64; f()];
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = if true { C[0] } else { C[1] };
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user