From a09079f27aa631b011f6c0703200862d28af81f4 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Sat, 15 May 2021 16:00:24 +0200 Subject: Fix coercion of two closures to a function pointer Fixes #8604. --- crates/hir_ty/src/tests/coercion.rs | 17 ++++++++++++++++- crates/hir_ty/src/tests/simple.rs | 36 ------------------------------------ 2 files changed, 16 insertions(+), 37 deletions(-) (limited to 'crates/hir_ty/src/tests') diff --git a/crates/hir_ty/src/tests/coercion.rs b/crates/hir_ty/src/tests/coercion.rs index 190471069..67295b663 100644 --- a/crates/hir_ty/src/tests/coercion.rs +++ b/crates/hir_ty/src/tests/coercion.rs @@ -1,6 +1,6 @@ use expect_test::expect; -use super::{check_infer, check_infer_with_mismatches}; +use super::{check_infer, check_infer_with_mismatches, check_types}; #[test] fn infer_block_expr_type_mismatch() { @@ -858,3 +858,18 @@ fn coerce_unsize_generic() { "]], ); } + +#[test] +fn infer_two_closures_lub() { + check_types( + r#" +fn foo(c: i32) { + let add = |a: i32, b: i32| a + b; + let sub = |a, b| a - b; + //^ |i32, i32| -> i32 + if c > 42 { add } else { sub }; + //^ fn(i32, i32) -> i32 +} + "#, + ) +} diff --git a/crates/hir_ty/src/tests/simple.rs b/crates/hir_ty/src/tests/simple.rs index a9cd42186..5c70a1fc0 100644 --- a/crates/hir_ty/src/tests/simple.rs +++ b/crates/hir_ty/src/tests/simple.rs @@ -1039,42 +1039,6 @@ fn infer_in_elseif() { ) } -#[test] -fn infer_closure_unify() { - check_infer( - r#" - fn foo(f: bool) { - let a = |x| x; - let b = |x| x; - let id = if f { a } else { b }; - id(123); - } - "#, - expect![[r#" - 7..8 'f': bool - 16..106 '{ ...23); }': () - 26..27 'a': |i32| -> i32 - 30..35 '|x| x': |i32| -> i32 - 31..32 'x': i32 - 34..35 'x': i32 - 45..46 'b': |i32| -> i32 - 49..54 '|x| x': |i32| -> i32 - 50..51 'x': i32 - 53..54 'x': i32 - 64..66 'id': |i32| -> i32 - 69..90 'if f {... { b }': |i32| -> i32 - 72..73 'f': bool - 74..79 '{ a }': |i32| -> i32 - 76..77 'a': |i32| -> i32 - 85..90 '{ b }': |i32| -> i32 - 87..88 'b': |i32| -> i32 - 96..98 'id': |i32| -> i32 - 96..103 'id(123)': i32 - 99..102 '123': i32 - "#]], - ) -} - #[test] fn infer_if_match_with_return() { check_infer( -- cgit v1.2.3