https://llvm.org/bugs/show_bug.cgi?id=23076

            Bug ID: 23076
           Summary: line number info causes erratic stepping in gdb
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]
    Classification: Unclassified

int a = 1, b;

int main(void)
{
    if (a
        &&
        b)
        return 1;

    return 0;
}
//*****************

When compiled with -g, the branch instructions that are generated at the end of
the basic blocks that evaluate the conditions get line number entries that
differ from those of the conditions, causing the debugger to skip back to the
if statement's line during single stepping. Some partial IR:

define i32 @main() #0 {
entry:
  %retval = alloca i32, align 4
  store i32 0, i32* %retval
  %0 = load i32, i32* @a, align 4, !dbg !14
  %tobool = icmp ne i32 %0, 0, !dbg !14
  br i1 %tobool, label %land.lhs.true, label %if.end, !dbg !16

land.lhs.true:                                    ; preds = %entry
  %1 = load i32, i32* @b, align 4, !dbg !17
  %tobool1 = icmp ne i32 %1, 0, !dbg !17
  br i1 %tobool1, label %if.then, label %if.end, !dbg !18  <====

...

!4 = !MDSubprogram(name: "main", scope: !1, file: !1, line: 3, type: !5,
isLocal: false, isDefinition: true, scopeLine: 4, flags: DIFlagPrototyped,
isOptimized: false, function: i32 ()* @main, variables: !2)

...

!14 = !MDLocation(line: 5, column: 9, scope: !15)
!15 = distinct !MDLexicalBlock(scope: !4, file: !1, line: 5, column: 9)
!16 = !MDLocation(line: 6, column: 9, scope: !15)
!17 = !MDLocation(line: 7, column: 9, scope: !15)
!18 = !MDLocation(line: 5, column: 9, scope: !4) <====


This started happening with r225956.

It seems that the branch instruction should be associated with the same line
and scope as the instructions that evaluate the condition. This is especially
visible with the second branch, as it currently makes the debugger bounce back
to the if when stepping through the condition.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to