# Copyright 2016-2018 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 "failed to prepare" $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.*"
