fix: resolve inference variable before applying adjustments

This commit is contained in:
Ryo Yoshida 2022-11-16 19:54:07 +09:00
parent 0dd0dfb7df
commit 1ad11b5366
No known key found for this signature in database
GPG key ID: E25698A930586171
2 changed files with 17 additions and 1 deletions

View file

@ -541,7 +541,7 @@ pub struct ReceiverAdjustments {
impl ReceiverAdjustments { impl ReceiverAdjustments {
pub(crate) fn apply(&self, table: &mut InferenceTable<'_>, ty: Ty) -> (Ty, Vec<Adjustment>) { pub(crate) fn apply(&self, table: &mut InferenceTable<'_>, ty: Ty) -> (Ty, Vec<Adjustment>) {
let mut ty = ty; let mut ty = table.resolve_ty_shallow(&ty);
let mut adjust = Vec::new(); let mut adjust = Vec::new();
for _ in 0..self.autoderefs { for _ in 0..self.autoderefs {
match autoderef::autoderef_step(table, ty.clone()) { match autoderef::autoderef_step(table, ty.clone()) {

View file

@ -1707,3 +1707,19 @@ impl<T, const N: usize> Trait for [T; N] {
"#, "#,
); );
} }
#[test]
fn unsize_array_with_inference_variable() {
check_types(
r#"
//- minicore: try, slice
use core::ops::ControlFlow;
fn foo() -> ControlFlow<(), [usize; 1]> { loop {} }
fn bar() -> ControlFlow<(), ()> {
let a = foo()?.len();
//^ usize
ControlFlow::Continue(())
}
"#,
);
}