Correct bad scoping for for loops.  This fixes #640
diff --git a/CHANGES b/CHANGES
index ca2650c..2243be9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -3,6 +3,13 @@
 
 Version 2.9.1
 -------------
+(bugfix release, release date undecided)
+
+- Fixed a regression that caused for loops to not be able to use the same
+  variable for the target as well as source iterator.  (#640)
+
+Version 2.9.1
+-------------
 (bugfix release, released on January 7th 2017)
 
 - Resolved a regression with call block scoping for macros.  Nested caller
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index a9042a5..4f84a32 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -1034,7 +1034,7 @@
             else:
                 if self.environment.is_async:
                     self.write('auto_aiter(')
-                self.visit(node.iter, loop_frame)
+                self.visit(node.iter, frame)
                 if self.environment.is_async:
                     self.write(')')
             self.write(' if (')
@@ -1046,7 +1046,7 @@
         else:
             if self.environment.is_async and not extended_loop:
                 self.write('auto_aiter(')
-            self.visit(node.iter, loop_frame)
+            self.visit(node.iter, frame)
             if self.environment.is_async and not extended_loop:
                 self.write(')')
 
diff --git a/tests/test_regression.py b/tests/test_regression.py
index d185cd9..3230bfd 100644
--- a/tests/test_regression.py
+++ b/tests/test_regression.py
@@ -412,3 +412,13 @@
         assert t.module.link_detail('circle', 'Index', '/') == (
             '<p><span class="fa fa-fw fa-circle">'
             '</span><a href="/">Index</a></p>')
+
+    def test_variable_reuse(self, env):
+        t = env.from_string('{% for x in x.y %}{{ x }}{% endfor %}')
+        assert t.render(x={'y': [0, 1, 2]}) == '012'
+
+        t = env.from_string('{% for x in x.y %}{{ loop.index0 }}|{{ x }}{% endfor %}')
+        assert t.render(x={'y': [0, 1, 2]}) == '0|01|12|2'
+
+        t = env.from_string('{% for x in x.y recursive %}{{ x }}{% endfor %}')
+        assert t.render(x={'y': [0, 1, 2]}) == '012'