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

# Test that breakpoints on C++ constructors work, despite the
# fact that gcc generates several versions of constructor function.

if { [skip_cplus_tests] } { continue }


standard_testfile .cc

if [get_compiler_info "c++"] {
    return -1
}

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

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

# Set a breakpoint with multiple locations
# and a condition.

gdb_test "break 'Derived::Derived(int)'" \
    "Breakpoint.*at.*: Derived::Derived.int.. \\(2 locations\\).*" \
    "set-breakpoint at ctor"

gdb_breakpoint [gdb_get_line_number "set breakpoint here"]

gdb_test "break 'Derived::~Derived()'" \
    "Breakpoint.*at.*: Derived::~Derived... \\(2 locations\\).*" \
    "set-breakpoint at dtor"

gdb_test "continue" \
    ".*Breakpoint.*Derived.*i=7.*" \
    "run to breakpoint 1 v1"

gdb_continue_to_breakpoint "set breakpoint here, first time" ".* breakpoint here"

gdb_test "continue" \
    ".*Breakpoint.*Derived.*i=15.*" \
    "run to breakpoint 1 v2"

gdb_continue_to_breakpoint "set breakpoint here, second time" ".* breakpoint here"

gdb_test "continue" \
    ".*Breakpoint.*~Derived.*" \
    "run to breakpoint 3 v1"

gdb_test "continue" \
    ".*Breakpoint.*~Derived.*" \
    "run to breakpoint 3 v2"

gdb_test "continue" \
    ".*exited normally.*" \
    "run to exit"



