diff --git a/crates/ide-diagnostics/src/handlers/type_mismatch.rs b/crates/ide-diagnostics/src/handlers/type_mismatch.rs index bfdda53740..be2432f44e 100644 --- a/crates/ide-diagnostics/src/handlers/type_mismatch.rs +++ b/crates/ide-diagnostics/src/handlers/type_mismatch.rs @@ -1163,6 +1163,38 @@ struct Bar { ); } + #[test] + fn trait_upcast_ok() { + check_diagnostics( + r#" +//- minicore: coerce_unsized +trait A: B {} +trait B {} + +fn test(a: &dyn A) -> &dyn B { + a + //^ error: expected &dyn B, found &dyn A +} +"#, + ); + } + + #[test] + fn trait_upcast_err() { + check_diagnostics( + r#" +//- minicore: coerce_unsized +trait A {} // `A` does not have `B` as a supertrait, so no upcast :c +trait B {} + +fn test(a: &dyn A) -> &dyn B { + a + //^ error: expected &dyn B, found &dyn A +} +"#, + ); + } + #[test] fn return_no_value() { check_diagnostics_with_disabled(