summaryrefslogtreecommitdiffstats
path: root/src/test/ui/closures/2229_closure_analysis/migrations/issue-90024-adt-correct-subst.rs
blob: ed8cb042b3ea6a6862f9b9be3bf5fa7b1321158c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Test that rustc doesn't ICE as in #90024.
// check-pass
// edition=2018

#![warn(rust_2021_incompatible_closure_captures)]

// Checks there's no double-subst into the generic args, otherwise we get OOB
// MCVE by @lqd
pub struct Graph<N, E, Ix> {
    _edges: E,
    _nodes: N,
    _ix: Vec<Ix>,
}
fn graph<N, E>() -> Graph<N, E, i32> {
    todo!()
}
fn first_ice() {
    let g = graph::<i32, i32>();
    let _ = || g;
}

// Checks that there is a subst into the fields, otherwise we get normalization error
// MCVE by @cuviper
use std::iter::Empty;
struct Foo<I: Iterator> {
    data: Vec<I::Item>,
}
pub fn second_ice() {
    let v = Foo::<Empty<()>> { data: vec![] };

    (|| v.data[0])();
}

pub fn main() {
    first_ice();
    second_ice();
}