# Copyright 2005-2026 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/>.

require !use_gdb_stub

standard_testfile .cc

set flags {}
lappend flags debug
lappend flags c++

if {[prepare_for_testing "failed to prepare" $testfile $srcfile $flags]} {
    return -1
}

# This is a testcase specifically for the `start' GDB command.  For regular
# stop-in-main goal in the testcases consider using `runto_main' instead.

# In this C++ version of the test (as opposed to start.exp), we specifically
# test that the temporary breakpoint created by the start command has a single
# location, even if we have a function named "main" in a non-root namespace.

# For C++ programs, "start" should stop in main().
if { [gdb_start_cmd] < 0 } {
    fail start
    return -1
}

gdb_test "" \
	 "Temporary breakpoint $decimal at $hex: file.*main \\(\\) at .*start-cpp.cc:.*" \
	 "start"
