# Copyright 2000, 2004 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Michael Snyder (msnyder@redhat.com)

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

# re-use the program from the "return2" test.
set testfile "return2"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

proc finish_1 { type } {
    global gdb_prompt

    gdb_test "break ${type}_func" "Breakpoint \[0123456789\].*" \
	    "set break on ${type}_func"
    gdb_test "continue" "Breakpoint.* ${type}_func.*" \
	    "continue to ${type}_func"
    send_gdb "finish\n"
    gdb_expect {
	-re ".*Value returned is .* = 49 '1'\r\n$gdb_prompt $" {
	    if { $type == "char" } {
		pass "finish from char_func"
	    } else {
		fail "finish from ${type}_func"
	    }
	}
	-re ".*Value returned is .* = \[0123456789\]* '1'\r\n$gdb_prompt $" {
	    if { $type == "char" } {
		pass "finish from char_func (non-ASCII char set?)"
	    } else {
		fail "finish from ${type}_func"
	    }
	}
	-re ".*Value returned is .* = 1\r\n$gdb_prompt $" {
	    pass "finish from ${type}_func"
	}
	-re ".*$gdb_prompt $" {
	    fail "finish from ${type}_func"
	}
	timeout {
	    fail "finish from ${type}_func (timeout)"
	}
    }
}

proc finish_void { } {
    global gdb_prompt

    gdb_test "break void_func" "Breakpoint \[0123456789\].*" \
	    "set break on void_func"
    gdb_test "continue" "Breakpoint.* void_func.*" \
	    "continue to void_func"
    send_gdb "finish\n"
    # Some architectures will have one or more instructions after the
    # call instruction which still is part of the call sequence, so we
    # must be prepared for a "finish" to show us the void_func call
    # again as well as the statement after.
    gdb_expect {
	-re ".*void_checkpoint.*$gdb_prompt $" {
	    pass "finish from void_func"
	}
	-re "0x\[0-9a-fA-F\]+ in main.*call to void_func.*$gdb_prompt $" {
	    pass "finish from void_func"
	}
	-re ".*$gdb_prompt $" {
	    fail "finish from void_func"
	}
	timeout {
	    fail "finish from void_func (timeout)"
	}
    }
}

proc finish_tests { } {
    global gdb_prompt

    if { ! [ runto_main ] } then {
	gdb_suppress_entire_file "Run to main failed, so all tests in this file will automatically fail."
    }

    finish_void
    finish_1 "char"
    finish_1 "short"
    finish_1 "int"
    finish_1 "long"
    finish_1 "long_long"
    finish_1 "float"
    finish_1 "double"
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

set timeout 30
finish_tests
