Skip to content

Commit 7f828ef

Browse files
committed
Rust: Add another type inference test
1 parent d11d2ca commit 7f828ef

2 files changed

Lines changed: 43 additions & 4 deletions

File tree

rust/ql/test/library-tests/type-inference/main.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,33 @@ mod try_expressions {
978978
}
979979
}
980980

981+
mod impl_overlap {
982+
#[derive(Debug)]
983+
struct S1;
984+
985+
trait MyTrait {
986+
fn m1(self) -> S1;
987+
}
988+
989+
impl MyTrait for S1 {
990+
fn m1(self) -> S1 {
991+
panic!("not called");
992+
}
993+
}
994+
995+
#[rustfmt::skip]
996+
impl S1 {
997+
fn m1(self) -> S1 { // target
998+
self
999+
}
1000+
}
1001+
1002+
pub fn f() {
1003+
let x = S1;
1004+
println!("{:?}", x.m1()); // $ method=target
1005+
}
1006+
}
1007+
9811008
fn main() {
9821009
field_access::f();
9831010
method_impl::f();
@@ -995,4 +1022,5 @@ fn main() {
9951022
implicit_self_borrow::f();
9961023
borrowed_typed::f();
9971024
try_expressions::f();
1025+
impl_overlap::f();
9981026
}

rust/ql/test/library-tests/type-inference/type-inference.expected

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
testFailures
2+
| main.rs:1004:26:1004:31 | x.m1() | Unexpected result: method=m1 |
23
inferType
34
| loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | Self [trait T1] |
45
| loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | Self [trait T2] |
@@ -1094,7 +1095,17 @@ inferType
10941095
| main.rs:975:49:975:62 | ...::Ok(...) | E | main.rs:925:5:926:14 | S1 |
10951096
| main.rs:975:49:975:62 | ...::Ok(...) | T | main.rs:925:5:926:14 | S1 |
10961097
| main.rs:975:60:975:61 | S1 | | main.rs:925:5:926:14 | S1 |
1097-
| main.rs:983:5:983:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo |
1098-
| main.rs:984:5:984:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo |
1099-
| main.rs:984:20:984:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
1100-
| main.rs:984:41:984:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
1098+
| main.rs:986:15:986:18 | SelfParam | | main.rs:985:5:987:5 | Self [trait MyTrait] |
1099+
| main.rs:990:15:990:18 | SelfParam | | main.rs:982:5:983:14 | S1 |
1100+
| main.rs:990:27:992:9 | { ... } | | main.rs:982:5:983:14 | S1 |
1101+
| main.rs:997:15:997:18 | SelfParam | | main.rs:982:5:983:14 | S1 |
1102+
| main.rs:997:27:999:9 | { ... } | | main.rs:982:5:983:14 | S1 |
1103+
| main.rs:998:13:998:16 | self | | main.rs:982:5:983:14 | S1 |
1104+
| main.rs:1003:13:1003:13 | x | | main.rs:982:5:983:14 | S1 |
1105+
| main.rs:1003:17:1003:18 | S1 | | main.rs:982:5:983:14 | S1 |
1106+
| main.rs:1004:26:1004:26 | x | | main.rs:982:5:983:14 | S1 |
1107+
| main.rs:1004:26:1004:31 | x.m1() | | main.rs:982:5:983:14 | S1 |
1108+
| main.rs:1010:5:1010:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo |
1109+
| main.rs:1011:5:1011:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo |
1110+
| main.rs:1011:20:1011:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
1111+
| main.rs:1011:41:1011:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |

0 commit comments

Comments
 (0)