# Copyright 2009-2013 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 "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::)?A \[^\r\n\]*\r\n#1 \[^\r\n\]* main \[^\r\n\]*" \
	 "bt from A"

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