fix #114275
this ICE was caused by `transform_ty` in compiler/rustc_symbol_mangling/src/typeid/typeid_itanium_cxx_abi.rs encountering an unevaluated const, while expecting it to already be evaluated. add a regression test Update tests/ui/sanitize/issue-114275-cfi-const-expr-in-arry-len.rs Co-authored-by: Michael Goulet <michael@errs.io> Update tests/ui/sanitize/issue-114275-cfi-const-expr-in-arry-len.rs Co-authored-by: Michael Goulet <michael@errs.io> fix test compiling for targets with -crt-static and failing this was causign https://github.com/rust-lang/rust/pull/114686 to fail
This commit is contained in:
parent
27a43f0834
commit
7834ffbebe
@ -824,11 +824,8 @@ fn transform_ty<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>, options: TransformTyOptio
|
|||||||
}
|
}
|
||||||
|
|
||||||
ty::Array(ty0, len) => {
|
ty::Array(ty0, len) => {
|
||||||
let len = len
|
let len = len.eval_target_usize(tcx, ty::ParamEnv::reveal_all());
|
||||||
.try_to_scalar()
|
|
||||||
.unwrap()
|
|
||||||
.to_u64()
|
|
||||||
.unwrap_or_else(|_| panic!("failed to convert length to u64"));
|
|
||||||
ty = Ty::new_array(tcx, transform_ty(tcx, *ty0, options), len);
|
ty = Ty::new_array(tcx, transform_ty(tcx, *ty0, options), len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
tests/ui/sanitize/issue-114275-cfi-const-expr-in-arry-len.rs
Normal file
15
tests/ui/sanitize/issue-114275-cfi-const-expr-in-arry-len.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Regression test for issue 114275 `typeid::typeid_itanium_cxx_abi::transform_ty`
|
||||||
|
// was expecting array type lengths to be evaluated, this was causing an ICE.
|
||||||
|
//
|
||||||
|
// build-pass
|
||||||
|
// compile-flags: -Ccodegen-units=1 -Clto -Zsanitizer=cfi -Ctarget-feature=-crt-static
|
||||||
|
// needs-sanitizer-cfi
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[repr(transparent)]
|
||||||
|
pub struct Array([u8; 1 * 1]);
|
||||||
|
|
||||||
|
pub extern "C" fn array() -> Array {
|
||||||
|
loop {}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user