Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect line number calculated in traceback #93662

Open
pablogsal opened this issue Jun 9, 2022 · 6 comments
Open

Incorrect line number calculated in traceback #93662

pablogsal opened this issue Jun 9, 2022 · 6 comments

Comments

@pablogsal
Copy link
Member

@pablogsal pablogsal commented Jun 9, 2022

Consider the following code:

def _run_with_file_output():
    example_report_generation_message= (
            """
            """
    ).strip()
    raise ValueError()

_run_with_file_output()

If you execute this with 3.11.0a7 you get (correct traceback):

Traceback (most recent call last):
  File "/home/pablogsal/github/python/3.11/lel.py", line 8, in <module>
    _run_with_file_output()
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/pablogsal/github/python/3.11/lel.py", line 6, in _run_with_file_output
    raise ValueError()
    ^^^^^^^^^^^^^^^^^^
ValueError

but on 3.11.0b1 you get:

Traceback (most recent call last):
  File "/home/pablogsal/github/python/3.11/lel.py", line 8, in <module>
    _run_with_file_output()
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/pablogsal/github/python/3.11/lel.py", line 255, in _run_with_file_output
ValueError

Notice that the last line number for _run_with_file_output is wrong (255 instead of 6).

Bisecting points at:

944fffee8916cb94321fa33cd3a43f4108717746 is the first bad commit
commit 944fffee8916cb94321fa33cd3a43f4108717746
Author: Mark Shannon <mark@hotpy.org>
Date:   Thu Apr 21 16:10:37 2022 +0100

    GH-88116: Use a compact format to represent end line and column offsets. (GH-91666)

    * Stores all location info in linetable to conform to PEP 626.

    * Remove column table from code objects.

    * Remove end-line table from code objects.

    * Document new location table format
@pablogsal
Copy link
Member Author

@pablogsal pablogsal commented Jun 9, 2022

Originally noticed by @godlygeek

@pablogsal
Copy link
Member Author

@pablogsal pablogsal commented Jun 9, 2022

Notice that if you change the input to be:

def _run_with_file_output():
    _= (
            """
            """
    ).strip()
    raise ValueError()

_run_with_file_output()

Then the line numbers and the tracebacks are correct (likely due to the difference in column offset):

Traceback (most recent call last):
  File "/home/pablogsal/github/python/3.11/lel.py", line 8, in <module>
    _run_with_file_output()
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/pablogsal/github/python/3.11/lel.py", line 6, in _run_with_file_output
    raise ValueError()
    ^^^^^^^^^^^^^^^^^^
ValueError

@pablogsal
Copy link
Member Author

@pablogsal pablogsal commented Jun 9, 2022

May be related to #93249

@markshannon
Copy link
Member

@markshannon markshannon commented Jun 10, 2022

It looks like the table is correct, but the parsing to get the line number is wrong.
.__code__.co_positions() shows the correct positions, but .__code__.co_lines() shows the wrong line numbers.

@markshannon
Copy link
Member

@markshannon markshannon commented Jun 10, 2022

It's actually a bug in compiler front-end. It produces an instruction with lineno == end_lineno but end_col_offset < col_offset

@markshannon
Copy link
Member

@markshannon markshannon commented Jun 10, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants