# Copyright 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 Jason Molenda (jmolenda@apple.com)

# An APPLE LOCAL change in infcmd.c was done to print an error message
# correctly when stack returned values are not printed by the 'finish'
# command.  Check that we continue to print the type correctly.

if $tracelevel then {
        strace $tracelevel
}

set timeout 30

set prms_id 0
set bug_id 0

set testfile "struct-ret-err"
set binfile ${objdir}/${subdir}/${testfile}
set srcfile ${testfile}.c

if  { [gdb_compile "${srcdir}/${subdir}/${testfile}.c" "${binfile}" executable {debug}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

# Start with a fresh gdb

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

if ![runto_main] then { 
  fail "struct-ret-err tests suppressed"
  return -1
}



gdb_test "step" "f \\(\\) at .*${testfile}.*" "step into f()"

# The fact that we couldn't print struct returns was also a bug, which we fixed.  So this test 
# no longer works...
#
#gdb_test "finish" ".*Value returned has type: struct xx. Cannot determine contents." "get type in error message"

gdb_exit
return 0
