Fix crashes in nested list comprehensions
SF bugs 409230 and 407800

Also remove bogus list comp code from symtable_assign().
diff --git a/Python/compile.c b/Python/compile.c
index f553262..cec8669 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1,4 +1,3 @@
-
 /* Compile an expression node to intermediate code */
 
 /* XXX TO DO:
@@ -4818,9 +4817,11 @@
 		}
 	case listmaker:
 		if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_for) {
+			st->st_tmpname++;
 			symtable_list_comprehension(st, CHILD(n, 1));
-			n = CHILD(n, 0);
-			goto loop;
+			symtable_node(st, CHILD(n, 0));
+			st->st_tmpname--;
+			return;
 		}
 	case atom:
 		if (TYPE(n) == atom && TYPE(CHILD(n, 0)) == NAME) {
@@ -5017,13 +5018,12 @@
 {
 	char tmpname[12];
 
-	sprintf(tmpname, "_[%d]", ++st->st_tmpname);
+	sprintf(tmpname, "_[%d]", st->st_tmpname);
 	symtable_add_def(st, tmpname, DEF_LOCAL);
 	symtable_assign(st, CHILD(n, 1), 0);
 	symtable_node(st, CHILD(n, 3));
 	if (NCH(n) == 5)
 		symtable_node(st, CHILD(n, 4));
-	--st->st_tmpname;
 }
 
 static void
@@ -5095,9 +5095,11 @@
 		}
 		return;
 	case listmaker:
-		if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_for)
-			symtable_list_comprehension(st, CHILD(n, 1));
-		else {
+		if (NCH(n) > 1 && TYPE(CHILD(n, 1)) == list_for) {
+			/* XXX This is an error, but the next pass
+			   will catch it. */ 
+			return;
+		} else {
 			for (i = 0; i < NCH(n); i += 2)
 				symtable_assign(st, CHILD(n, i), flag);
 		}