-# Copyright 2011-2016 Free Software Foundation, Inc.
+# Copyright 2011-2020 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
error "somebody incompatibly modified the source files needed by linespec.exp"
}
+gdb_test_no_output "set breakpoint pending off" \
+ "disable pending breakpoints for linespec tests"
+
# Copying files to a remote host loses the directory prefix during
# compilation.
if { [is_remote host] } {
gdb_test "clear one/thefile.cc:$l1" \
"Deleted breakpoint $decimal *" \
"clear breakpoint using dir/file:line"
+
+ if { [readline_is_used] } {
+ # There are functions named 'twodup' in both source files.
+ # Both should be found if we restrict the linespec to the
+ # ambiguous "thefile.cc" source filename. Check both
+ # completion and setting the breakpoint.
+ set tst "complete unique function name in two source files"
+ send_gdb "break thefile.cc:t\t"
+ gdb_test_multiple "" $tst {
+ -re "break thefile.cc:twodup\\(\\) " {
+ pass $tst
+
+ send_gdb "\n"
+ gdb_test "" \
+ "Breakpoint $decimal at $hex: thefile.cc:twodup\\(\\). \[(\]2 locations\[)\]" \
+ "set break at unique function name in two source files"
+ }
+ }
+
+ # Check both completing and setting a breakpoint on a linespec
+ # with a source component, where there's more than one source
+ # file with the same basename. We should find the functions
+ # in all matching sources -- one/thefile.cc and
+ # two/thefile.cc. The "one" file has "z1()", while the "two"
+ # file has "z2()".
+ set tst "complete non-unique function name in two source files"
+ send_gdb "break thefile.cc:z\t"
+ gdb_test_multiple "" $tst {
+ -re "break thefile.cc:z\\\x07" {
+ send_gdb "\t"
+ gdb_test_multiple "" $tst {
+ -re "\r\nz1\\(\\)\[ \t\]+z2\\(\\)\[ \t\]+\r\n$gdb_prompt " {
+ pass $tst
+
+ send_gdb "\n"
+ gdb_test "" \
+ "Function \"z\" not defined in \"thefile.cc\"." \
+ "set break at non-unique function name in two source files"
+ }
+ }
+ }
+ }
+
+ # Now check that disambiguating the source path makes GDB only
+ # match the symbols in that file. "z" should now have a
+ # unique completion to "z1()", and setting the breakpoint
+ # should find only one location.
+ set tst "complete unique function name in disambiguated source file"
+ send_gdb "break one/thefile.cc:z\t"
+ gdb_test_multiple "" $tst {
+ -re "break one/thefile.cc:z1\\(\\) " {
+ pass $tst
+
+ send_gdb "\n"
+ gdb_test "" \
+ "Breakpoint $decimal at $hex: file .*thefile.cc, line \[^\r\n\]*" \
+ "set break at unique function name in disambiguated source file"
+ }
+ }
+
+ # Check that using a non-existing source path does not confuse
+ # GDB. It should not match any symbol.
+ set dir_file "one/thefile.cc"
+ set non_existing "/some/non-existing/absolute/path/prefix/$dir_file"
+ set non_existing_re [string_to_regexp $non_existing]
+
+ set tst "complete functions in non-existing absolute path"
+ send_gdb "break $non_existing:\t"
+ gdb_test_multiple "" $tst {
+ -re "break $non_existing_re:\\\x07" {
+ send_gdb "\t\t"
+ gdb_test_multiple "" $tst {
+ -re "^\\\x07\\\x07" {
+ pass $tst
+
+ # There's a function called 'twodup' in each
+ # of the thefile.cc files. Make sure none is
+ # picked.
+ send_gdb "twodup\n"
+ gdb_test "" \
+ "No source file named $non_existing_re." \
+ "set break in function in non-existing absolute path"
+ }
+ }
+ }
+ }
+ }
}
gdb_test "break thefile.cc:$l1" \
# not the locations.
gdb_test "complete condition " "condition $decimal\r\ncondition $decimal\r\ncondition $decimal"
-gdb_test_no_output "set breakpoint pending off" \
- "disable pending breakpoints for linespec tests"
-
# This is PR breakpoints/12856.
gdb_test "break lspec.cc:nosuchfunction" \
"Function \"nosuchfunction\" not defined in \"lspec.cc\"." \
# Multi-inferior tests.
#
-gdb_test "add-inferior" "Added inferior 2" \
+gdb_test "add-inferior" "Added inferior 2.*" \
"add inferior for linespec tests"
gdb_test "inferior 2" "Switching to inferior 2 .*" \
# Note that in particular this should not cause errors when re-setting
# breakpoints.
gdb_test "file $binfile" \
- "Reading symbols from .*done." \
+ "Reading symbols from .*" \
"set the new inferior file for linespec tests"
gdb_test "break main" \