https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105024

            Bug ID: 105024
           Summary: g++ generates wrong line debug information
           Product: gcc
           Version: 11.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: blarsen at redhat dot com
  Target Milestone: ---

Created attachment 52665
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52665&action=edit
minimal testcase

When compiling the attached test case with the options -g -O0, there is a bug
in the line table generation.

The first instruction of merge_sort is assigned to line 17 instead of line 2,
then backtracks to line 5. It generates some confusion when trying to debug the
code, as GDB prints the wrong line when that instruction is being evaluated.

My guess is that g++ sees the early exit and assumes that part of the "if" is
related to that exit, and mislabels that instruction. I tried removing the
"return" statement and putting the rest of the code inside an else block, and
the line table was closer to what I expected.

This seems to be a long standing bug, as I can reproduce it with g++ 8.5.0 and
g++ 11.2.1, though 8.5.0 sets the line as 16 instead.

Reply via email to