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

if { [skip_cplus_tests] } { continue }

set srcfile expand-sals.cc
if { [prepare_for_testing expand-sals.exp expand-sals $srcfile {debug c++}] } {
    return -1
}
if ![runto_main] {
    return -1
}

gdb_breakpoint [gdb_get_line_number "exit-line"]

gdb_breakpoint [gdb_get_line_number "func-line"]
gdb_continue_to_breakpoint "func" ".*func-line.*"

gdb_test "up" "caller-line.*"

# PC should not be now at the boundary of source lines to make the original bug
# exploitable.  The GLOBAL_X variable exists in the source for this purpose.

# Original problem was an internal error here.
set test "break"
gdb_test_multiple $test $test {
    -re "Breakpoint \[0-9\]+ at .*, line \[0-9\]+\\. \\(\[2-9\] locations\\)\r\n$gdb_prompt $" {
	fail $test
    }
    -re "Breakpoint \[0-9\]+ at .*, line \[0-9\]+\\.\r\n$gdb_prompt $" {
	pass $test
    }
}

gdb_continue_to_breakpoint "caller" ".*caller-line.*"

# Test GDB caught this return call and not the next one through B::B()
gdb_test "bt" \
	 "#0 \[^\r\n\]* A \[^\r\n\]*\r\n#1 \[^\r\n\]* main \[^\r\n\]*" \
	 "bt from A"

gdb_continue_to_breakpoint "next caller func" ".*func-line.*"

# Verify GDB really could not catch any other breakpoint location.

gdb_continue_to_breakpoint "uncaught return" ".*exit-line.*"
