prevent lambda functions from having docstrings #8164
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index 5be6508..1a2009c 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -353,6 +353,10 @@
         f1, f2 = f()
         self.assertNotEqual(id(f1.func_code), id(f2.func_code))
 
+    def test_lambda_doc(self):
+        l = lambda: "foo"
+        self.assertIsNone(l.__doc__)
+
     def test_unicode_encoding(self):
         code = u"# -*- coding: utf-8 -*-\npass\n"
         self.assertRaises(SyntaxError, compile, code, "tmp", "exec")
diff --git a/Misc/NEWS b/Misc/NEWS
index 35fddeb..ffcdaa7 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@
 Core and Builtins
 -----------------
 
+- Issue #8164: Don't allow lambda functions to have a docstring.
+
 - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
   (SIGINT).  If an error occurs while importing the site module, the error is
   printed and Python exits.  Initialize the GIL before importing the site
diff --git a/Python/compile.c b/Python/compile.c
index 4ea2ee9..12210e1 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1518,6 +1518,11 @@
 
 	/* unpack nested arguments */
 	compiler_arguments(c, args);
+
+	/* Make None the first constant, so the lambda can't have a
+	   docstring. */
+	if (compiler_add_o(c, c->u->u_consts, Py_None) < 0)
+		return 0;
 	
 	c->u->u_argcount = asdl_seq_LEN(args->args);
 	VISIT_IN_SCOPE(c, expr, e->v.Lambda.body);