Rust: Add more type inference tests

This commit is contained in:
Tom Hvitved
2025-06-02 10:14:50 +02:00
parent 821f2fd681
commit f2832712bc
2 changed files with 123 additions and 38 deletions

View File

@@ -1667,12 +1667,18 @@ mod async_ {
f1().await.f(); // $ method=S1f
f2().await.f(); // $ method=S1f
f3().await.f(); // $ method=S1f
S2.await.f(); // $ MISSING: method=S1f
let b = async {
S1
};
b.await.f(); // $ MISSING: method=S1f
}
}
mod impl_trait {
struct S1;
struct S2;
trait Trait1 {
fn f1(&self) {} // Trait1f1
@@ -1694,10 +1700,37 @@ mod impl_trait {
S1
}
trait MyTrait<A> {
fn get_a(&self) -> A; // MyTrait::get_a
}
impl MyTrait<S2> for S1 {
fn get_a(&self) -> S2 {
S2
}
}
fn get_a_my_trait() -> impl MyTrait<S2> {
S1
}
fn uses_my_trait1<A, B: MyTrait<A>>(t: B) -> A {
t.get_a() // $ method=MyTrait::get_a
}
fn uses_my_trait2<A>(t: impl MyTrait<A>) -> A {
t.get_a() // $ method=MyTrait::get_a
}
pub fn f() {
let x = f1();
x.f1(); // $ method=Trait1f1
x.f2(); // $ method=Trait2f2
let a = get_a_my_trait();
let b = uses_my_trait1(a); // $ MISSING: type=b:S2
let a = get_a_my_trait();
let c = uses_my_trait2(a); // $ type=c:S2
let d = uses_my_trait2(S1); // $ MISSING: type=d:S2
}
}

View File

@@ -2378,10 +2378,10 @@ inferType
| main.rs:1642:25:1644:5 | { ... } | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1643:9:1643:10 | S1 | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1646:41:1650:5 | { ... } | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1646:41:1650:5 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future |
| main.rs:1646:41:1650:5 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future |
| main.rs:1646:41:1650:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 |
| main.rs:1647:9:1649:9 | { ... } | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1647:9:1649:9 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future |
| main.rs:1647:9:1649:9 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future |
| main.rs:1647:9:1649:9 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 |
| main.rs:1648:13:1648:14 | S1 | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1657:17:1657:46 | SelfParam | | {EXTERNAL LOCATION} | Pin |
@@ -2396,54 +2396,106 @@ inferType
| main.rs:1658:36:1658:37 | S1 | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1662:41:1664:5 | { ... } | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1662:41:1664:5 | { ... } | | main.rs:1652:5:1652:14 | S2 |
| main.rs:1662:41:1664:5 | { ... } | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future |
| main.rs:1662:41:1664:5 | { ... } | impl Trait<0> | {EXTERNAL LOCATION} | trait Future |
| main.rs:1662:41:1664:5 | { ... } | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 |
| main.rs:1663:9:1663:10 | S2 | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1663:9:1663:10 | S2 | | main.rs:1652:5:1652:14 | S2 |
| main.rs:1663:9:1663:10 | S2 | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future |
| main.rs:1663:9:1663:10 | S2 | impl Trait<0> | {EXTERNAL LOCATION} | trait Future |
| main.rs:1663:9:1663:10 | S2 | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 |
| main.rs:1667:9:1667:12 | f1(...) | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1667:9:1667:18 | await ... | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1668:9:1668:12 | f2(...) | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future |
| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0> | {EXTERNAL LOCATION} | trait Future |
| main.rs:1668:9:1668:12 | f2(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 |
| main.rs:1668:9:1668:18 | await ... | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1668:9:1668:18 | await ... | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1669:9:1669:12 | f3(...) | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0> | file:///RUSTUP_HOME/toolchain/lib/rustlib/src/rust/library/core/src/future/future.rs:7:1:105:1 | trait Future |
| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0> | {EXTERNAL LOCATION} | trait Future |
| main.rs:1669:9:1669:12 | f3(...) | impl Trait<0>.Output | main.rs:1636:5:1636:14 | S1 |
| main.rs:1669:9:1669:18 | await ... | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1669:9:1669:18 | await ... | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1678:15:1678:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1678:15:1678:19 | SelfParam | &T | main.rs:1677:5:1679:5 | Self [trait Trait1] |
| main.rs:1682:15:1682:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1682:15:1682:19 | SelfParam | &T | main.rs:1681:5:1683:5 | Self [trait Trait2] |
| main.rs:1686:15:1686:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1686:15:1686:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 |
| main.rs:1690:15:1690:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1690:15:1690:19 | SelfParam | &T | main.rs:1675:5:1675:14 | S1 |
| main.rs:1693:37:1695:5 | { ... } | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1693:37:1695:5 | { ... } | | main.rs:1675:5:1675:14 | S1 |
| main.rs:1693:37:1695:5 | { ... } | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 |
| main.rs:1693:37:1695:5 | { ... } | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 |
| main.rs:1694:9:1694:10 | S1 | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1694:9:1694:10 | S1 | | main.rs:1675:5:1675:14 | S1 |
| main.rs:1694:9:1694:10 | S1 | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 |
| main.rs:1694:9:1694:10 | S1 | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 |
| main.rs:1698:13:1698:13 | x | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1698:13:1698:13 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 |
| main.rs:1698:13:1698:13 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 |
| main.rs:1698:17:1698:20 | f1(...) | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1698:17:1698:20 | f1(...) | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 |
| main.rs:1698:17:1698:20 | f1(...) | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 |
| main.rs:1699:9:1699:9 | x | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1699:9:1699:9 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 |
| main.rs:1699:9:1699:9 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 |
| main.rs:1700:9:1700:9 | x | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1700:9:1700:9 | x | impl Trait<0> | main.rs:1677:5:1679:5 | trait Trait1 |
| main.rs:1700:9:1700:9 | x | impl Trait<1> | main.rs:1681:5:1683:5 | trait Trait2 |
| main.rs:1706:5:1706:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo |
| main.rs:1707:5:1707:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo |
| main.rs:1707:20:1707:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
| main.rs:1707:41:1707:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
| main.rs:1670:9:1670:10 | S2 | | main.rs:1652:5:1652:14 | S2 |
| main.rs:1670:9:1670:16 | await S2 | | main.rs:1652:5:1652:14 | S2 |
| main.rs:1672:13:1672:14 | S1 | | main.rs:1636:5:1636:14 | S1 |
| main.rs:1684:15:1684:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1684:15:1684:19 | SelfParam | &T | main.rs:1683:5:1685:5 | Self [trait Trait1] |
| main.rs:1688:15:1688:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1688:15:1688:19 | SelfParam | &T | main.rs:1687:5:1689:5 | Self [trait Trait2] |
| main.rs:1692:15:1692:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1692:15:1692:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 |
| main.rs:1696:15:1696:19 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1696:15:1696:19 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 |
| main.rs:1699:37:1701:5 | { ... } | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1699:37:1701:5 | { ... } | | main.rs:1680:5:1680:14 | S1 |
| main.rs:1699:37:1701:5 | { ... } | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 |
| main.rs:1699:37:1701:5 | { ... } | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 |
| main.rs:1700:9:1700:10 | S1 | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1700:9:1700:10 | S1 | | main.rs:1680:5:1680:14 | S1 |
| main.rs:1700:9:1700:10 | S1 | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 |
| main.rs:1700:9:1700:10 | S1 | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 |
| main.rs:1704:18:1704:22 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1704:18:1704:22 | SelfParam | &T | main.rs:1703:5:1705:5 | Self [trait MyTrait] |
| main.rs:1708:18:1708:22 | SelfParam | | file://:0:0:0:0 | & |
| main.rs:1708:18:1708:22 | SelfParam | &T | main.rs:1680:5:1680:14 | S1 |
| main.rs:1708:31:1710:9 | { ... } | | main.rs:1681:5:1681:14 | S2 |
| main.rs:1709:13:1709:14 | S2 | | main.rs:1681:5:1681:14 | S2 |
| main.rs:1713:45:1715:5 | { ... } | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1713:45:1715:5 | { ... } | | main.rs:1680:5:1680:14 | S1 |
| main.rs:1713:45:1715:5 | { ... } | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1713:45:1715:5 | { ... } | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1714:9:1714:10 | S1 | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1714:9:1714:10 | S1 | | main.rs:1680:5:1680:14 | S1 |
| main.rs:1714:9:1714:10 | S1 | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1714:9:1714:10 | S1 | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1717:41:1717:41 | t | | main.rs:1717:26:1717:38 | B |
| main.rs:1717:52:1719:5 | { ... } | | main.rs:1717:23:1717:23 | A |
| main.rs:1718:9:1718:9 | t | | main.rs:1717:26:1717:38 | B |
| main.rs:1718:9:1718:17 | t.get_a() | | main.rs:1717:23:1717:23 | A |
| main.rs:1721:26:1721:26 | t | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1721:26:1721:26 | t | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1721:26:1721:26 | t | impl Trait<0>.A | main.rs:1721:23:1721:23 | A |
| main.rs:1721:51:1723:5 | { ... } | | main.rs:1721:23:1721:23 | A |
| main.rs:1722:9:1722:9 | t | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1722:9:1722:9 | t | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1722:9:1722:9 | t | impl Trait<0>.A | main.rs:1721:23:1721:23 | A |
| main.rs:1722:9:1722:17 | t.get_a() | | main.rs:1721:23:1721:23 | A |
| main.rs:1726:13:1726:13 | x | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1726:13:1726:13 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 |
| main.rs:1726:13:1726:13 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 |
| main.rs:1726:17:1726:20 | f1(...) | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1726:17:1726:20 | f1(...) | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 |
| main.rs:1726:17:1726:20 | f1(...) | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 |
| main.rs:1727:9:1727:9 | x | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1727:9:1727:9 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 |
| main.rs:1727:9:1727:9 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 |
| main.rs:1728:9:1728:9 | x | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1728:9:1728:9 | x | impl Trait<0> | main.rs:1683:5:1685:5 | trait Trait1 |
| main.rs:1728:9:1728:9 | x | impl Trait<1> | main.rs:1687:5:1689:5 | trait Trait2 |
| main.rs:1729:13:1729:13 | a | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1729:13:1729:13 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1729:13:1729:13 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1729:17:1729:32 | get_a_my_trait(...) | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1729:17:1729:32 | get_a_my_trait(...) | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1729:17:1729:32 | get_a_my_trait(...) | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1730:32:1730:32 | a | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1730:32:1730:32 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1730:32:1730:32 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1731:13:1731:13 | a | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1731:13:1731:13 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1731:13:1731:13 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1731:17:1731:32 | get_a_my_trait(...) | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1731:17:1731:32 | get_a_my_trait(...) | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1731:17:1731:32 | get_a_my_trait(...) | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1732:13:1732:13 | c | | main.rs:1681:5:1681:14 | S2 |
| main.rs:1732:17:1732:33 | uses_my_trait2(...) | | main.rs:1681:5:1681:14 | S2 |
| main.rs:1732:32:1732:32 | a | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1732:32:1732:32 | a | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1732:32:1732:32 | a | impl Trait<0>.A | main.rs:1681:5:1681:14 | S2 |
| main.rs:1733:32:1733:33 | S1 | | file://:0:0:0:0 | impl Trait ... |
| main.rs:1733:32:1733:33 | S1 | | main.rs:1680:5:1680:14 | S1 |
| main.rs:1733:32:1733:33 | S1 | impl Trait<0> | main.rs:1703:5:1705:5 | trait MyTrait |
| main.rs:1739:5:1739:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo |
| main.rs:1740:5:1740:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo |
| main.rs:1740:20:1740:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
| main.rs:1740:41:1740:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
testFailures