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 {
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();
for _ in 0..self.autoderefs {
match autoderef::autoderef_step(table, ty.clone()) {

View File

@ -1707,3 +1707,19 @@ fn f<U>(_: Self::Item) {}
"#,
);
}
#[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(())
}
"#,
);
}