Fix memory leak with bad generator expression
diff --git a/Python/ast.c b/Python/ast.c
index e483650..548710f 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -1901,6 +1901,7 @@
         if (!expr1)
             return NULL;
         if (expr1->kind == GeneratorExp_kind) {
+	    free_expr(expr1);
 	    ast_error(ch, "augmented assignment to generator "
 		      "expression not possible");
 	    return NULL;
@@ -1908,6 +1909,7 @@
 	if (expr1->kind == Name_kind) {
 		char *var_name = PyString_AS_STRING(expr1->v.Name.id);
 		if (var_name[0] == 'N' && !strcmp(var_name, "None")) {
+			free_expr(expr1);
 			ast_error(ch, "assignment to None");
 			return NULL;
 		}
@@ -1918,12 +1920,17 @@
 	    expr2 = ast_for_testlist(c, ch);
 	else
 	    expr2 = Yield(ast_for_expr(c, ch), LINENO(ch));
-        if (!expr2)
+        if (!expr2) {
+            free_expr(expr1);
             return NULL;
+        }
 
         operator = ast_for_augassign(CHILD(n, 1));
-        if (!operator)
+        if (!operator) {
+            free_expr(expr1);
+            free_expr(expr2);
             return NULL;
+        }
 
 	return AugAssign(expr1, operator, expr2, LINENO(n));
     }
@@ -1964,7 +1971,7 @@
 	else
 	    expression = ast_for_expr(c, value);
 	if (!expression)
-	    return NULL;
+	    goto error;
 	return Assign(targets, expression, LINENO(n));
     error:
         for (i = i / 2; i >= 0; i--)