binutils-gdb/gdb/testsuite/gdb.mi/mi-linespec-err-cp.exp
Don Breazeal 1cafadb4e4 PR 18303, Tolerate malformed input for lookup_symbol-called functions
lookup_symbol is often called with user input.  Consequently, any
function called from lookup_symbol{,_in_language} should attempt to
deal with malformed input gracefully.  After all, malformed user
input is not a programming/API error.

This patch does not attempt to find/correct all instances of this.  It
only fixes locations in the code that trigger test suite failures.

This patch fixes PR breakpoints/18303, "Assertion: -breakpoint-insert
with windows paths of file in non-current directory".

The patch includes three new tests related to this.  One is just
gdb.linespec/ls-errs.exp copied and converted to use C++ instead of C, and
to add a case using a file name containing a Windows-style logical drive
specifier.  The others include an MI test to provide a regression test for
the specific case reported in PR 18303, and a C++ test for proper error
handling of access to a program variable when using a file scope specifier
that refers to a non-existent file.

Tested on x86_64 native Linux.

gdb/ChangeLog
2016-01-28  Keith Seitz  <keiths@redhat.com>

	PR breakpoints/18303
	* cp-namespace.c (cp_lookup_bare_symbol): Change assertion to
	look for "::" instead of simply ":".
	(cp_search_static_and_baseclasses): Return null_block_symbol for
	malformed input.
	Remove assertions.
	* cp-support.c (cp_find_first_component_aux): Do not return
	a prefix length for ':' unless the next character is also ':'.

gdb/testsuite/ChangeLog
2016-01-28  Don Breazeal  <donb@codesourcery.com>

	* gdb.cp/scope-err.cc: New test program.
	* gdb.cp/scope-err.exp: New test script.
	* gdb.linespec/ls-errs.c (myfunction): Expanded to have multiple
	lines and "set breakpoint here" comment.
	* gdb.linespec/ls-errs.exp: Added C++ testing and new test case.
	Fixed some whitespace and format issues.
	* gdb.mi/mi-linespec-err-cp.cc: New test program.
	* gdb.mi/mi-linespec-err-cp.exp: New test script.
2016-03-15 15:25:15 -07:00

60 lines
1.9 KiB
Plaintext

# Copyright 2016 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Regression test for PR breakpoints/18303. Tests that the correct
# errors is generated when setting a breakpoint in a non-existent
# file with a Windows-style logical drive names and C++.
if {[skip_cplus_tests]} {
continue
}
load_lib mi-support.exp
set MIFLAGS "-i=mi"
standard_testfile .cc
set exefile $testfile
if {[prepare_for_testing $testfile $exefile $srcfile {debug c++}]} {
return -1
}
gdb_exit
if {[mi_gdb_start]} {
continue
}
# Turn off the pending breakpoint queries.
mi_gdb_test "-interpreter-exec console \"set breakpoint pending off\"" \
{=cmd-param-changed,param=\"breakpoint pending\",.*\^done} \
"-interpreter-exec console \"set breakpoint pending off\""
mi_run_to_main
# Run to a location in the file.
set bp_location [gdb_get_line_number "set breakpoint here"]
mi_gdb_test "-break-insert ${srcfile}:${bp_location}" \
{\^done,bkpt=.number="2",type="breakpoint".*\}} "set breakpoint"
mi_execute_to "exec-continue" "breakpoint-hit" "myfunction" ".*" ".*" "24" \
{ "" "disp=\"keep\"" } "breakpoint hit"
# Set a breakpoint in a C++ source file whose name contains a
# Windows-style logical drive.
mi_gdb_test \
"-break-insert -f \"c:/uu.cpp:13\"" \
".*No source file named c:/uu.cpp.*"