Skip to content

Commit 8a051d7

Browse files
committed
Rust: Add type inference test
1 parent b34777e commit 8a051d7

File tree

3 files changed

+554
-84
lines changed

3 files changed

+554
-84
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2740,6 +2740,7 @@ mod blanket_impl;
27402740
mod closure;
27412741
mod dereference;
27422742
mod dyn_type;
2743+
mod regressions;
27432744

27442745
fn main() {
27452746
field_access::f(); // $ target=f
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
mod regression1 {
2+
3+
pub struct S<T>(T);
4+
5+
pub enum E {
6+
V { vec: Vec<E> },
7+
}
8+
9+
impl<T> From<S<T>> for Option<T> {
10+
fn from(s: S<T>) -> Self {
11+
Some(s.0) // $ fieldof=S
12+
}
13+
}
14+
15+
pub fn f() -> E {
16+
let mut vec_e = Vec::new(); // $ target=new
17+
let mut opt_e = None;
18+
19+
let e = E::V { vec: Vec::new() }; // $ target=new
20+
21+
if let Some(e) = opt_e {
22+
vec_e.push(e); // $ target=push
23+
}
24+
opt_e = e.into(); // $ target=into
25+
26+
#[rustfmt::skip]
27+
let _ = if let Some(last) = vec_e.pop() // $ target=pop
28+
{
29+
opt_e = last.into(); // $ target=into
30+
};
31+
32+
opt_e.unwrap() // $ target=unwrap
33+
}
34+
}

0 commit comments

Comments
 (0)