From 0b8aa909a39e75a6c6da0afedaa6c3ab70c6a0d0 Mon Sep 17 00:00:00 2001
From: Joe Soroka <gits@joesoroka.com>
Date: Tue, 8 Mar 2011 15:19:54 -0800
Subject: [PATCH] fix c99 for-loop init decl scope (thanks: grischka)

see http://lists.nongnu.org/archive/html/tinycc-devel/2011-03/msg00005.html
---
 tccgen.c        | 2 ++
 tests/tcctest.c | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/tccgen.c b/tccgen.c
index fbeb7824..604f93c9 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -4384,6 +4384,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym,
         int e;
         next();
         skip('(');
+        s = local_stack;
         if (tok != ';') {
             /* c99 for-loop init decl? */
             if (!decl0(VT_LOCAL, 1)) {
@@ -4415,6 +4416,7 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym,
         gjmp_addr(c);
         gsym(a);
         gsym_addr(b, c);
+        sym_pop(&local_stack, s);
     } else 
     if (tok == TOK_DO) {
         next();
diff --git a/tests/tcctest.c b/tests/tcctest.c
index e0e0dba5..aaa57777 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -387,9 +387,11 @@ void loop_test()
     } while (i < 10);
     printf("\n");
 
+    char count = 123;
     /* c99 for loop init test */
     for (size_t count = 1; count < 3; count++)
         printf("count=%d\n", count);
+    printf("count = %d\n", count);
 
     /* break/continue tests */
     i = 0;