gdb: Handle requests to print source lines backward
authorAndrew Burgess <andrew.burgess@embecosm.com>
Sun, 6 Jan 2019 23:53:22 +0000 (23:53 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 8 Jan 2019 12:19:40 +0000 (12:19 +0000)
commitec98a4ad5bfcba33deb5cb786c023082adbbfb46
treeec1e5af6779f35b0912adbc96df476f179c413c7
parent62ea19c1000856c2633a952c52269fca4143931a
gdb: Handle requests to print source lines backward

...by which I mean from high line number to low, not, actually
backward character by character!

Commit:

  commit 62f29fda90cf1d5a1899f57ef78452471c707fd6
  Date:   Tue Oct 9 22:21:05 2018 -0600

      Highlight source code using GNU Source Highlight

introduced a regression in the test gdb.linespec/explicit.exp, in
which a request is made to GDB to print a reverse sequence of lines,
from +10 to -10 from the current line number.  The expected behaviour
is that GDB prints nothing.  The above commit changed this so that GDB
now prints:

  Line number 32 out of range; /path/to/gdb/testsuite/gdb.linespec/explicit.c has 71 lines.

which is a little confusing.

This commit fixes the regression, and restores the behaviour that GDB
prints nothing.

While I was passing I noticed a call to `back` on a std::string that I
was concerned could be empty if the request for source lines returns
an empty string.  I don't know if it would be possible for a request
for lines to return an empty string, I guess it should be impossible,
in which case, maybe this should be an assertion, but adding a `empty`
check, seems like an easy and cheap safety net.

gdb/ChangeLog:

* source.c (print_source_lines_base): Handle requests to print
reverse line number sequences, and guard against empty lines
string.
gdb/ChangeLog
gdb/source.c