mirror of
https://github.com/github/codeql.git
synced 2026-03-30 20:28:15 +02:00
Rust: Add type inference test
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user