diff --git a/Python/ast.c b/Python/ast.c
index c40c355..fbce7d7 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -512,14 +512,14 @@
 seq_for_testlist(struct compiling *c, const node *n)
 {
     /* testlist: test (',' test)* [','] */
+    asdl_seq *seq;
+    expr_ty expression;
+    int i;
     assert(TYPE(n) == testlist
 	   || TYPE(n) == listmaker
 	   || TYPE(n) == testlist_gexp
 	   || TYPE(n) == testlist_safe
 	   );
-    asdl_seq *seq;
-    expr_ty expression;
-    int i;
 
     seq = asdl_seq_new((NCH(n) + 1) / 2);
     if (!seq)
@@ -641,12 +641,13 @@
                                     compiler_complex_args(CHILD(ch, 1))); 
 		}
                 else if (TYPE(CHILD(ch, 0)) == NAME) {
+		    expr_ty name;
 		    if (!strcmp(STR(CHILD(ch, 0)), "None")) {
 			    ast_error(CHILD(ch, 0), "assignment to None");
 			    goto error;
 		    }
-                    expr_ty name = Name(NEW_IDENTIFIER(CHILD(ch, 0)),
-                                        Param, LINENO(ch));
+                    name = Name(NEW_IDENTIFIER(CHILD(ch, 0)),
+                                Param, LINENO(ch));
                     if (!name)
                         goto error;
                     asdl_seq_APPEND(args, name);
@@ -1897,12 +1898,13 @@
 	if (!targets)
 	    return NULL;
 	for (i = 0; i < NCH(n) - 2; i += 2) {
+	    expr_ty e;
 	    node *ch = CHILD(n, i);
 	    if (TYPE(ch) == yield_expr) {
 		ast_error(ch, "assignment to yield expression not possible");
 		goto error;
 	    }
-	    expr_ty e = ast_for_testlist(c, ch, 0);
+	    e = ast_for_testlist(c, ch, 0);
 
 	    /* set context to assign */
 	    if (!e) 
diff --git a/Python/compile.c b/Python/compile.c
index 10c94e7..47c57f4 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2329,8 +2329,9 @@
 		src = dot + 1;
 		while (dot) {
 			/* NB src is only defined when dot != NULL */
+			PyObject *attr;
 			dot = strchr(src, '.');
-			PyObject *attr = PyString_FromStringAndSize(src, 
+			attr = PyString_FromStringAndSize(src, 
 					    dot ? dot - src : strlen(src));
 			ADDOP_O(c, LOAD_ATTR, attr, names);
 			src = dot + 1;
diff --git a/Python/symtable.c b/Python/symtable.c
index bd41202..7af1390 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -444,12 +444,13 @@
 static int
 check_unoptimized(const PySTEntryObject* ste) {
 	char buf[300];
+	const char* trailer;
 
 	if (ste->ste_type == ModuleBlock || !ste->ste_unoptimized
 	    || !(ste->ste_free || ste->ste_child_free))
 		return 1;
 
-	const char* trailer = (ste->ste_child_free ? 
+	trailer = (ste->ste_child_free ? 
 		       "contains a nested function with free variables" :
 			       "is a nested function");
 
@@ -621,8 +622,9 @@
 	/* Recursively call analyze_block() on each child block */
 	for (i = 0; i < PyList_GET_SIZE(ste->ste_children); ++i) {
 		PyObject *c = PyList_GET_ITEM(ste->ste_children, i);
+		PySTEntryObject* entry;
 		assert(c && PySTEntry_Check(c));
-		PySTEntryObject* entry = (PySTEntryObject*)c;
+		entry = (PySTEntryObject*)c;
 		if (!analyze_block(entry, newbound, newfree, newglobal))
 			goto error;
 		if (entry->ste_free || entry->ste_child_free)
