# Copyright 2016-2021 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 {[build_executable "failed to prepare" $exefile $srcfile {debug c++}]} {
    return -1
}

mi_clean_restart $binfile

# 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_runto_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.*"
