diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 8e430f72f63c..883b2842f2c7 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 000000000000..8bb9a995cce3 --- /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 590ca9dbfc6a..0d821d4183f1 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; }