• David Chase's avatar
    cmd/compile: enhance debug_test for infinite loops · 591193b0
    David Chase authored
    ssa/debug_test.go already had a step limit; this exposes
    it to individual tests, and it is then set low for the
    infinite loop tests.
    
    That however is not enough; in an infinite loop debuggers
    see an unchanging line number, and therefore keep trying
    until they see a different one.  To do this, the concept
    of a "bogus" line number is introduced, and on output
    single-instruction infinite loops are detected and a
    hardware nop with correct line number is inserted into
    the loop; the branch itself receives a bogus line number.
    
    This breaks up the endless stream of same line number and
    causes both gdb and delve to not hang; Delve complains
    about the incorrect line number while gdb does
    a sort of odd step-to-nowhere that then steps back
    to the loop.  Since repeats are suppressed in the reference
    file, a single line is shown there.
    
    (The wrong line number mentioned in previous message
    was an artifact of debug_test.go, not Delve, and is now
    fixed.)
    
    The bogus line number exposed in Delve is less than
    wonderful, but compared to hanging, it is better.
    
    Fixes #30664.
    
    Change-Id: I30c927cf8869a84c6c9b84033ee44d7044aab552
    Reviewed-on: https://go-review.googlesource.com/c/go/+/168477
    Run-TryBot: David Chase <drchase@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarKeith Randall <khr@golang.org>
    591193b0
infloop.dlv-opt.nexts 151 Bytes