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);
+}