If Py_OptimizeFlag is false then always evaluate assert conditions, don't
test __debug__ at runtime.  Closes SF patch #548833.
diff --git a/Misc/NEWS b/Misc/NEWS
index a0ae51e..9363694 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -6,6 +6,10 @@
 
 Core and builtins
 
+- The assert statement no longer tests __debug__ at runtime.  This means
+  that assert statements cannot be disabled by assigning a false value
+  to __debug__.
+
 - A method zfill() was added to str and unicode, that fills a numeric
   string to the left with zeros.  For example,
   "+123".zfill(6) -> "+00123".
diff --git a/Python/compile.c b/Python/compile.c
index 373363f..03f8e3c 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2664,27 +2664,20 @@
 static void
 com_assert_stmt(struct compiling *c, node *n)
 {
-	int a = 0, b = 0;
+	int a = 0;
 	int i;
 	REQ(n, assert_stmt); /* 'assert' test [',' test] */
-	/* Generate code like for
+	if (Py_OptimizeFlag)
+		return;
+	/* Generate code like
 	   
-	   if __debug__:
-	      if not <test>:
+	     if not <test>:
 	         raise AssertionError [, <message>]
 
 	   where <message> is the second test, if present.
 	*/
-
-	if (Py_OptimizeFlag)
-		return;
-	com_addop_name(c, LOAD_GLOBAL, "__debug__");
-	com_push(c, 1);
-	com_addfwref(c, JUMP_IF_FALSE, &a);
-	com_addbyte(c, POP_TOP);
-	com_pop(c, 1);
 	com_node(c, CHILD(n, 1));
-	com_addfwref(c, JUMP_IF_TRUE, &b);
+	com_addfwref(c, JUMP_IF_TRUE, &a);
 	com_addbyte(c, POP_TOP);
 	com_pop(c, 1);
 	/* Raise that exception! */
@@ -2696,9 +2689,8 @@
 	com_addoparg(c, RAISE_VARARGS, i);
 	com_pop(c, i);
 	/* The interpreter does not fall through */
-	/* All jumps converge here */
+	/* Jump ends up here */
 	com_backpatch(c, a);
-	com_backpatch(c, b);
 	com_addbyte(c, POP_TOP);
 }