[Python-checkins] bpo-46331: Do not set line number of instruction storing doc-string. (GH-30518)

markshannon webhook-mailer at python.org
Tue Jan 11 06:29:06 EST 2022


https://github.com/python/cpython/commit/bd04fac7eb929cd11ab6985deb61d9780447fbff
commit: bd04fac7eb929cd11ab6985deb61d9780447fbff
branch: main
author: Mark Shannon <mark at hotpy.org>
committer: markshannon <mark at hotpy.org>
date: 2022-01-11T11:28:30Z
summary:

bpo-46331: Do not set line number of instruction storing doc-string. (GH-30518)

files:
A Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst
M Lib/test/test_sys_settrace.py
M Python/compile.c

diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 8e430f72f63cc..883b2842f2c77 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -1403,6 +1403,25 @@ def func():
              (3, 'line'),
              (3, 'return')])
 
+    def test_class_creation_with_docstrings(self):
+
+        def func():
+            class Class_1:
+                ''' the docstring. 2'''
+                def __init__(self):
+                    ''' Another docstring. 4'''
+                    self.a = 5
+
+        self.run_and_compare(func,
+            [(0, 'call'),
+             (1, 'line'),
+             (1, 'call'),
+             (1, 'line'),
+             (2, 'line'),
+             (3, 'line'),
+             (3, 'return'),
+             (1, 'return')])
+
 
 class SkipLineEventsTraceTestCase(TraceTestCase):
     """Repeat the trace tests, but with per-line events skipped"""
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst b/Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst
new file mode 100644
index 0000000000000..8bb9a995cce35
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-01-10-16-21-54.bpo-46331.h1AC-i.rst	
@@ -0,0 +1,2 @@
+Do not set line number of instruction storing doc-string. Fixes regression
+introduced in 3.11 alpha.
diff --git a/Python/compile.c b/Python/compile.c
index 590ca9dbfc6a3..0d821d4183f12 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2034,6 +2034,7 @@ compiler_body(struct compiler *c, asdl_stmt_seq *stmts)
             st = (stmt_ty)asdl_seq_GET(stmts, 0);
             assert(st->kind == Expr_kind);
             VISIT(c, expr, st->v.Expr.value);
+            UNSET_LOC(c);
             if (!compiler_nameop(c, __doc__, Store))
                 return 0;
         }



More information about the Python-checkins mailing list