Fix value suggestion for array in generic context

This commit is contained in:
Michael Goulet 2024-04-14 09:21:38 -04:00
parent d6ac50e547
commit e4c71f1fd8
4 changed files with 30 additions and 5 deletions

View File

@ -22,6 +22,7 @@
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(control_flow_enum)] #![feature(control_flow_enum)]
#![feature(extract_if)] #![feature(extract_if)]
#![feature(if_let_guard)]
#![feature(let_chains)] #![feature(let_chains)]
#![feature(option_take_if)] #![feature(option_take_if)]
#![feature(never_type)] #![feature(never_type)]

View File

@ -4583,11 +4583,9 @@ fn ty_kind_suggestion(&self, param_env: ty::ParamEnv<'tcx>, ty: Ty<'tcx>) -> Opt
format!("&{}{ty}", mutability.prefix_str()) format!("&{}{ty}", mutability.prefix_str())
} }
} }
ty::Array(ty, len) => format!( ty::Array(ty, len) if let Some(len) = len.try_eval_target_usize(tcx, param_env) => {
"[{}; {}]", format!("[{}; {}]", self.ty_kind_suggestion(param_env, *ty)?, len)
self.ty_kind_suggestion(param_env, *ty)?, }
len.eval_target_usize(tcx, ty::ParamEnv::reveal_all()),
),
ty::Tuple(tys) => format!( ty::Tuple(tys) => format!(
"({})", "({})",
tys.iter() tys.iter()

View File

@ -0,0 +1,8 @@
fn as_chunks<const N: usize>() -> [u8; N] {
loop {
break;
//~^ ERROR mismatched types
}
}
fn main() {}

View File

@ -0,0 +1,18 @@
error[E0308]: mismatched types
--> $DIR/value-suggestion-ice-123906.rs:3:9
|
LL | fn as_chunks<const N: usize>() -> [u8; N] {
| ------- expected `[u8; ]` because of this return type
LL | loop {
| ---- this loop is expected to be of type `[u8; N]`
LL | break;
| ^^^^^ expected `[u8; N]`, found `()`
|
help: give the `break` a value of the expected type
|
LL | break value;
| +++++
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0308`.