Rust: Add type inference test

This commit is contained in:
Tom Hvitved
2026-03-05 20:49:58 +01:00
parent b5bf1c578c
commit 838f3b90e7
2 changed files with 90 additions and 0 deletions

View File

@@ -32,3 +32,45 @@ mod regression1 {
opt_e.unwrap() // $ target=unwrap
}
}
mod regression2 {
use std::ops::Sub;
#[derive(Copy, Clone)]
struct S1;
#[derive(Copy, Clone)]
struct S2;
impl Sub for S1 {
type Output = Self;
// S1SubS1
fn sub(self, _rhs: Self) -> Self::Output {
S1
}
}
impl Sub<S2> for S1 {
type Output = S2;
// S1SubS2
fn sub(self, _rhs: S2) -> Self::Output {
S2
}
}
impl Sub<&S2> for S1 {
type Output = <S1 as Sub<S2>>::Output;
// S1SubRefS2
fn sub(self, other: &S2) -> <S1 as Sub<S2>>::Output {
Sub::sub(self, *other) // $ target=S1SubS2 target=deref
}
}
fn foo() {
let s1 = S1;
let s2 = S2;
let x = s1 - &s2; // $ target=S1SubRefS2 type=x:S2 $ SPURIOUS: type=x:S1
}
}

View File

@@ -4947,6 +4947,22 @@ inferCertainType
| regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec |
| regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global |
| regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () |
| regressions.rs:48:16:48:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:48:22:48:25 | _rhs | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:48:50:50:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:57:16:57:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:57:22:57:25 | _rhs | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:57:48:59:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:66:16:66:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:66:22:66:26 | other | | {EXTERNAL LOCATION} | & |
| regressions.rs:66:22:66:26 | other | TRef | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:67:22:67:25 | self | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:67:29:67:33 | other | | {EXTERNAL LOCATION} | & |
| regressions.rs:67:29:67:33 | other | TRef | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:71:14:75:5 | { ... } | | {EXTERNAL LOCATION} | () |
| regressions.rs:74:22:74:24 | &s2 | | {EXTERNAL LOCATION} | & |
inferType
| associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper |
| associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A |
@@ -14789,4 +14805,36 @@ inferType
| regressions.rs:32:9:32:13 | opt_e | | {EXTERNAL LOCATION} | Option |
| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:5:5:7:5 | E |
| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:5:5:7:5 | E |
| regressions.rs:48:16:48:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:48:22:48:25 | _rhs | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:48:50:50:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:49:13:49:14 | S1 | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:57:16:57:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:57:22:57:25 | _rhs | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:57:48:59:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:58:13:58:14 | S2 | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:66:16:66:19 | SelfParam | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:66:22:66:26 | other | | {EXTERNAL LOCATION} | & |
| regressions.rs:66:22:66:26 | other | TRef | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:66:61:68:9 | { ... } | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:67:13:67:34 | ...::sub(...) | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:67:13:67:34 | ...::sub(...) | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:67:22:67:25 | self | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:67:28:67:33 | * ... | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:67:29:67:33 | other | | {EXTERNAL LOCATION} | & |
| regressions.rs:67:29:67:33 | other | TRef | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:71:14:75:5 | { ... } | | {EXTERNAL LOCATION} | () |
| regressions.rs:72:13:72:14 | s1 | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:72:18:72:19 | S1 | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:73:13:73:14 | s2 | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:73:18:73:19 | S2 | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:74:13:74:13 | x | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:74:13:74:13 | x | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:74:17:74:18 | s1 | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:74:17:74:24 | ... - ... | | regressions.rs:39:5:40:14 | S1 |
| regressions.rs:74:17:74:24 | ... - ... | | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:74:22:74:24 | &s2 | | {EXTERNAL LOCATION} | & |
| regressions.rs:74:22:74:24 | &s2 | TRef | regressions.rs:41:5:42:14 | S2 |
| regressions.rs:74:23:74:24 | s2 | | regressions.rs:41:5:42:14 | S2 |
testFailures