2 // Ensure non-capturing Closure passes CoerceMany.
3 fn foo(x: usize) -> usize {
7 fn bar(x: usize) -> usize {
12 // One FnDef and one non-capturing Closure
16 _ => unimplemented!(),
22 _ => unimplemented!(),
30 // Two FnDefs and one non-capturing Closure
35 _ => unimplemented!(),
42 _ => unimplemented!(),
49 _ => unimplemented!(),
52 let _ = [foo, bar, |a| 2];
53 let _ = [foo, |a| 2, bar];
54 let _ = [|a| 2, foo, bar];
58 // One FnDef and two non-capturing Closures
63 _ => unimplemented!(),
70 _ => unimplemented!(),
77 _ => unimplemented!(),
80 let _ = [foo, |a| 1, |a| 2];
81 let _ = [|a| 1, foo, |a| 2];
82 let _ = [|a| 1, |a| 2, foo];
86 // Three non-capturing Closures
91 _ => unimplemented!(),
94 let _ = [|a: usize| 0, |a| 1, |a| 2];
98 // Three non-capturing Closures variable
99 let clo0 = |a: usize| 0;
106 _ => unimplemented!(),
109 let clo0 = |a: usize| 0;
112 let _ = [clo0, clo1, clo2];
116 // --- Function pointer related part
118 // Closure is not in a variable
119 type FnPointer = fn(usize) -> usize;
122 0 => foo as FnPointer,
124 _ => unimplemented!(),
128 0 => foo as FnPointer,
129 _ => unimplemented!(),
131 let _ = [foo as FnPointer, |a| 2];
132 let _ = [|a| 2, foo as FnPointer];
133 let _ = [foo, bar, |x| x];
134 let _ = [foo as FnPointer, bar, |x| x];
135 let _ = [foo, bar as FnPointer, |x| x];
136 let _ = [foo, bar, (|x| x) as FnPointer];
137 let _ = [foo as FnPointer, bar as FnPointer, |x| x];
139 // Closure is in a variable
142 0 => foo as FnPointer,
144 _ => unimplemented!(),
149 0 => foo as FnPointer,
150 _ => unimplemented!(),
153 let _ = [foo as FnPointer, x];
154 let _ = [x, foo as FnPointer];
157 let _ = [foo, bar, x];
158 let x: FnPointer = |a| 2;
159 let _ = [foo, bar, x];
161 let _ = [foo, bar as FnPointer, x];
163 let _ = [foo as FnPointer, bar, x];
165 let _ = [foo as FnPointer, bar as FnPointer, x];