Fix SF buf #480096: Assign to __debug__ still allowed

Easy enough to catch assignment in the compiler.  The perverse user
can still change the value of __debug__, but that may be the least he
can do.
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index 9f20ba1..e976a30 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -1,6 +1,17 @@
 from test_support import verbose, TestFailed
 
 if verbose:
+    print "Testing whether compiler catches assignment to __debug__"
+
+try:
+    compile('__debug__ = 1', '?', 'single')
+except SyntaxError:
+    pass
+
+import __builtin__
+setattr(__builtin__, '__debug__', 'sure')
+
+if verbose:
     print 'Running tests on argument handling'
 
 try:
@@ -21,7 +32,8 @@
 except SyntaxError:
     pass
 
-print "testing complex args"
+if verbose:
+    print "testing complex args"
 
 def comp_args((a, b)):
     print a,b
diff --git a/Python/compile.c b/Python/compile.c
index c8a5669..1a46064 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -5459,8 +5459,13 @@
 			n = CHILD(n, 1);
 			goto loop;
 		} else if (TYPE(tmp) == NAME) {
-			if (strcmp(STR(tmp), "__debug__") == 0)
-				symtable_warn(st, ASSIGN_DEBUG);
+			if (strcmp(STR(tmp), "__debug__") == 0) {
+				PyErr_SetString(PyExc_SyntaxError, 
+						ASSIGN_DEBUG);
+				PyErr_SyntaxLocation(st->st_filename,
+					     st->st_cur->ste_opt_lineno);
+				st->st_errors++;
+			}
 			symtable_add_def(st, STR(tmp), DEF_LOCAL | def_flag);
 		}
 		return;