Skip to content

Commit c535326

Browse files
committed
Add test.
1 parent 933b618 commit c535326

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

tests/ui/mir/debug-ref-undef.rs

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// run-pass
2+
// compile-flags: -g -O -Zmir-opt-level=0 -Zinline-mir=y -Zmir-enable-passes=+ReferencePropagation
3+
4+
#![allow(dead_code)]
5+
6+
use std::marker::PhantomData;
7+
8+
struct RawTable<T> {
9+
marker: PhantomData<T>,
10+
}
11+
12+
impl<T> RawTable<T> {
13+
fn iter(&self) -> RawIter<T> {
14+
RawIter { marker: PhantomData }
15+
}
16+
}
17+
18+
struct RawIter<T> {
19+
marker: PhantomData<T>,
20+
}
21+
22+
impl<T> Iterator for RawIter<T> {
23+
type Item = ();
24+
fn next(&mut self) -> Option<()> {
25+
None
26+
}
27+
}
28+
29+
struct HashMap<T> {
30+
table: RawTable<T>,
31+
}
32+
33+
struct Iter<T> {
34+
inner: RawIter<T>, // Removing this breaks the reproducer
35+
}
36+
37+
impl<T> IntoIterator for &HashMap<T> {
38+
type Item = T;
39+
type IntoIter = Iter<T>;
40+
fn into_iter(self) -> Iter<T> {
41+
Iter { inner: self.table.iter() }
42+
}
43+
}
44+
45+
impl<T> Iterator for Iter<T> {
46+
type Item = T;
47+
fn next(&mut self) -> Option<T> {
48+
None
49+
}
50+
}
51+
52+
pub fn main() {
53+
let maybe_hash_set: Option<HashMap<()>> = None;
54+
for _ in maybe_hash_set.as_ref().unwrap_or(&HashMap { table: RawTable { marker: PhantomData } })
55+
{
56+
}
57+
}

0 commit comments

Comments
 (0)