diff options
author | Florian Diebold <[email protected]> | 2020-02-21 20:49:02 +0000 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2020-02-22 10:09:21 +0000 |
commit | 2d5ab6324795e5fc36e4b61cb66737958dc67e7a (patch) | |
tree | 2027747769d99c7733ac4f4366ccffd4fcf4983f /crates/ra_hir_ty/src/tests | |
parent | f126808b2ee79792631edc377bc8c2b0f329eebf (diff) |
Add &dyn Trait -> &dyn SuperTrait coercion, and fix &T -> &dyn Trait
Diffstat (limited to 'crates/ra_hir_ty/src/tests')
-rw-r--r-- | crates/ra_hir_ty/src/tests/coercion.rs | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/crates/ra_hir_ty/src/tests/coercion.rs b/crates/ra_hir_ty/src/tests/coercion.rs index b6fce9377..5594ed394 100644 --- a/crates/ra_hir_ty/src/tests/coercion.rs +++ b/crates/ra_hir_ty/src/tests/coercion.rs | |||
@@ -587,25 +587,37 @@ pub trait CoerceUnsized<T> {} | |||
587 | 587 | ||
588 | impl<T: Unsize<U>, U> CoerceUnsized<&U> for &T {} | 588 | impl<T: Unsize<U>, U> CoerceUnsized<&U> for &T {} |
589 | 589 | ||
590 | trait Foo {} | 590 | trait Foo<T, U> {} |
591 | trait Bar: Foo {} | 591 | trait Bar<U, T, X>: Foo<T, U> {} |
592 | struct S; | 592 | trait Baz<T, X>: Bar<usize, T, X> {} |
593 | impl Foo for S {} | 593 | |
594 | impl Bar for S {} | 594 | struct S<T, X>; |
595 | impl<T, X> Foo<T, usize> for S<T, X> {} | ||
596 | impl<T, X> Bar<usize, T, X> for S<T, X> {} | ||
597 | impl<T, X> Baz<T, X> for S<T, X> {} | ||
595 | 598 | ||
596 | fn test() { | 599 | fn test() { |
597 | let obj: &dyn Bar = &S; | 600 | let obj: &dyn Baz<i8, i16> = &S; |
598 | let obj: &dyn Foo = obj; | 601 | let obj: &dyn Bar<_, _, _> = obj; |
602 | let obj: &dyn Foo<_, _> = obj; | ||
603 | let obj2: &dyn Baz<i8, i16> = &S; | ||
604 | let _: &dyn Foo<_, _> = obj2; | ||
599 | } | 605 | } |
600 | "#, true), | 606 | "#, true), |
601 | @r###" | 607 | @r###" |
602 | [240; 300) '{ ...obj; }': () | 608 | [388; 573) '{ ...bj2; }': () |
603 | [250; 253) 'obj': &dyn Bar | 609 | [398; 401) 'obj': &dyn Baz<i8, i16> |
604 | [266; 268) '&S': &S | 610 | [423; 425) '&S': &S<i8, i16> |
605 | [267; 268) 'S': S | 611 | [424; 425) 'S': S<i8, i16> |
606 | [278; 281) 'obj': &dyn Foo | 612 | [435; 438) 'obj': &dyn Bar<usize, i8, i16> |
607 | [294; 297) 'obj': &dyn Bar | 613 | [460; 463) 'obj': &dyn Baz<i8, i16> |
608 | [294; 297): expected &dyn Foo, got &dyn Bar | 614 | [473; 476) 'obj': &dyn Foo<i8, usize> |
615 | [495; 498) 'obj': &dyn Bar<usize, i8, i16> | ||
616 | [508; 512) 'obj2': &dyn Baz<i8, i16> | ||
617 | [534; 536) '&S': &S<i8, i16> | ||
618 | [535; 536) 'S': S<i8, i16> | ||
619 | [546; 547) '_': &dyn Foo<i8, usize> | ||
620 | [566; 570) 'obj2': &dyn Baz<i8, i16> | ||
609 | "### | 621 | "### |
610 | ); | 622 | ); |
611 | } | 623 | } |