Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/tests/coercion.rs')
-rw-r--r--crates/hir-ty/src/tests/coercion.rs65
1 files changed, 63 insertions, 2 deletions
diff --git a/crates/hir-ty/src/tests/coercion.rs b/crates/hir-ty/src/tests/coercion.rs
index a80ce5002d..db06d55278 100644
--- a/crates/hir-ty/src/tests/coercion.rs
+++ b/crates/hir-ty/src/tests/coercion.rs
@@ -392,6 +392,34 @@ fn test() {
}
#[test]
+fn gen_yield_coerce() {
+ check_no_mismatches(
+ r#"
+fn test() {
+ let g = gen {
+ yield &1u32;
+ yield &&1u32;
+ };
+}
+ "#,
+ );
+}
+
+#[test]
+fn async_gen_yield_coerce() {
+ check_no_mismatches(
+ r#"
+fn test() {
+ let g = async gen {
+ yield &1u32;
+ yield &&1u32;
+ };
+}
+ "#,
+ );
+}
+
+#[test]
fn assign_coerce() {
check_no_mismatches(
r"
@@ -878,11 +906,11 @@ struct V<T> { t: T }
fn main() {
let a: V<&dyn Tr>;
(a,) = V { t: &S };
- //^^^^expected V<&'? S>, got (V<&'? (dyn Tr + '?)>,)
+ //^^^^expected V<&'? S>, got ({unknown},)
let mut a: V<&dyn Tr> = V { t: &S };
(a,) = V { t: &S };
- //^^^^expected V<&'? S>, got (V<&'? (dyn Tr + '?)>,)
+ //^^^^expected V<&'? S>, got ({unknown},)
}
"#,
);
@@ -1008,3 +1036,36 @@ fn f() {
"#,
);
}
+
+#[test]
+fn regression_22270() {
+ check_no_mismatches(
+ r#"
+fn a() {}
+fn b() {}
+
+fn foo<T, const N: usize>(x: [T; N]) -> Vec<T> {
+ loop {}
+}
+
+fn bar() {
+ foo([a, b]);
+}
+ "#,
+ );
+}
+
+#[test]
+fn async_fn_ret() {
+ check_no_mismatches(
+ r#"
+//- minicore: coerce_unsized, unsize, future, index, slice, range
+async fn foo(a: &[i32]) -> &[i32] {
+ if true {
+ return &[];
+ }
+ &a[..0]
+}
+ "#,
+ );
+}