Upgrade None assignment SyntaxWarning to a SyntaxError.
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index e2b1c95..5b7b717 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -138,6 +138,21 @@
         self.assertEqual(i, 1)
         self.assertEqual(j, -1)
 
+    def test_none_assignment(self):
+        stmts = [
+            'None = 0',
+            'None += 0',
+            '__builtins__.None = 0',
+            'def None(): pass',
+            'class None: pass',
+            '(a, None) = 0, 0',
+            'for None in range(10): pass',
+            'def f(None): pass',
+        ]
+        for stmt in stmts:
+            stmt += "\n"
+            self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'single')
+            self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'exec')
 
 def test_main():
     test_support.run_unittest(TestSpecifics)
diff --git a/Python/compile.c b/Python/compile.c
index 5549e9f..771bc2f 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1227,10 +1227,8 @@
 			msg = "assignment to None";
 		else
 			msg = "deleting None";
-		if (issue_warning(msg, c->c_filename, c->c_lineno) < 0) {
-			c->c_errors++;
-			return -1;
-		}
+		com_error(c, PyExc_SyntaxError, msg);
+		return -1;
 	}
 	return 0;
 }
@@ -1247,7 +1245,6 @@
 	if (kind != VAR_LOAD &&
 	    none_assignment_check(c, name, kind == VAR_STORE))
 	{
-		c->c_errors++;
 		i = 255;
 		goto done;
 	}
@@ -5483,8 +5480,10 @@
 	if ((flag & DEF_PARAM) && !(flag & DEF_INTUPLE) &&
 	    *name == 'N' && strcmp(name, "None") == 0)
 	{
-		if (symtable_warn(st, "argument named None"))
-			return -1;
+		PyErr_SetString(PyExc_SyntaxError, 
+			"Invalid syntax.  Assignment to None.");
+		symtable_error(st, 0);
+		return  -1;
 	}
 	if (_Py_Mangle(st->st_private, name, buffer, sizeof(buffer)))
 		name = buffer;