diff --git a/Python/compile.c b/Python/compile.c
index 8426038..5195f56 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1113,7 +1113,7 @@
 	return 1;
 }
 
-static int
+static void
 compiler_exit_scope(struct compiler *c)
 {
 	int n;
@@ -1126,14 +1126,14 @@
 	if (n >= 0) {
 		wrapper = PyList_GET_ITEM(c->c_stack, n);
 		c->u = (struct compiler_unit *)PyCObject_AsVoidPtr(wrapper);
+		/* we are deleting from a list so this really shouldn't fail */
 		if (PySequence_DelItem(c->c_stack, n) < 0)
-			return 0;
+			Py_FatalError("compiler_exit_scope()");
 		compiler_unit_check(c->u);
 	}
 	else
 		c->u = NULL;
 
-	return 1; /* XXX void? */
 }
 
 /* Allocate a new block and return a pointer to it.
@@ -1701,8 +1701,10 @@
 		return NULL;
 	switch (mod->kind) {
 	case Module_kind: 
-		if (!compiler_body(c, mod->v.Module.body))
+		if (!compiler_body(c, mod->v.Module.body)) {
+			compiler_exit_scope(c);
 			return 0;
+		}
 		break;
 	case Interactive_kind:
 		c->c_interactive = 1;
@@ -1872,8 +1874,10 @@
         docstring = compiler_isdocstring(st);
         if (docstring)
             first_const = st->v.Expr.value->v.Str.s;
-        if (compiler_add_o(c, c->u->u_consts, first_const) < 0)
+        if (compiler_add_o(c, c->u->u_consts, first_const) < 0)  {
+	    compiler_exit_scope(c);
             return 0;
+	}
 
         /* unpack nested arguments */
 	compiler_arguments(c, args);
@@ -1889,9 +1893,9 @@
 		VISIT(c, stmt, s2);
 	}
 	co = assemble(c, 1);
+	compiler_exit_scope(c);
 	if (co == NULL)
 		return 0;
-	compiler_exit_scope(c);
 
         compiler_make_closure(c, co, asdl_seq_LEN(args->defaults));
 
@@ -1923,6 +1927,7 @@
         str = PyString_InternFromString("__name__");
 	if (!str || !compiler_nameop(c, str, Load)) {
 		Py_XDECREF(str);
+		compiler_exit_scope(c);
 		return 0;
         }
         
@@ -1930,19 +1935,22 @@
         str = PyString_InternFromString("__module__");
 	if (!str || !compiler_nameop(c, str, Store)) {
 		Py_XDECREF(str);
+		compiler_exit_scope(c);
 		return 0;
         }
         Py_DECREF(str);
 
-	if (!compiler_body(c, s->v.ClassDef.body))
+	if (!compiler_body(c, s->v.ClassDef.body)) {
+		compiler_exit_scope(c);
 		return 0;
+	}
 
 	ADDOP(c, LOAD_LOCALS);
 	ADDOP(c, RETURN_VALUE);
 	co = assemble(c, 1);
+	compiler_exit_scope(c);
 	if (co == NULL)
 		return 0;
-	compiler_exit_scope(c);
 
         compiler_make_closure(c, co, 0);
 	ADDOP_I(c, CALL_FUNCTION, 0);
@@ -1976,9 +1984,9 @@
 	VISIT(c, expr, e->v.Lambda.body);
 	ADDOP(c, RETURN_VALUE);
 	co = assemble(c, 1);
+	compiler_exit_scope(c);
 	if (co == NULL)
 		return 0;
-	compiler_exit_scope(c);
 
         compiler_make_closure(c, co, asdl_seq_LEN(args->defaults));
 	Py_DECREF(name);
@@ -3149,9 +3157,9 @@
 	compiler_genexp_generator(c, e->v.GeneratorExp.generators, 0,
 				  e->v.GeneratorExp.elt);
 	co = assemble(c, 1);
+	compiler_exit_scope(c);
 	if (co == NULL)
 		return 0;
-	compiler_exit_scope(c);
 
         compiler_make_closure(c, co, 0);
 	VISIT(c, expr, outermost_iter);
