diff --git a/src/terminator/mod.rs b/src/terminator/mod.rs index a65cd02770e969f3216fee18d817806cf8fd370d..10faf307fa1bd0a91fc51ec03de214409b929caf 100644 --- a/src/terminator/mod.rs +++ b/src/terminator/mod.rs @@ -440,12 +440,16 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { Value::ByVal(PrimVal::Undef) => {} other => { let mut layout = layout; + let mut skip_arg_locals = true; 'outer: loop { for i in 0..layout.fields.count() { let field = layout.field(&self, i)?; if layout.fields.offset(i).bytes() == 0 && layout.size == field.size { layout = field; + skip_arg_locals = false; continue 'outer; + } else if skip_arg_locals { + arg_locals.next().unwrap(); } } break; diff --git a/tests/run-pass/iter_any.rs b/tests/run-pass/iter_any.rs new file mode 100644 index 0000000000000000000000000000000000000000..955d39deb8e14f2e13d8995a84e94bbe830f8dbc --- /dev/null +++ b/tests/run-pass/iter_any.rs @@ -0,0 +1,9 @@ +pub fn main() { + let g = |(), x: &u8| { 10u8 == *x }; + g((), &1u8); + + let f = |x: &u8| { 10u8 == *x }; + f(&1u8); + + [1, 2, 3u8].into_iter().any(|elt| 10 == *elt); +}