# Copyright 2007, 2008, 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 $tracelevel {
    strace $tracelevel
}

set testfile "frame-args"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    untested "Couldn't compile ${srcfile}"
    return -1
}

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

if ![runto break_me] then {
  perror "Couldn't run ${testfile}"
  return
}

# Test with "print frame-arguments" set to "all"

gdb_test "set print frame-arguments all" \
         "" \
         "set print frame-arguments all"
gdb_test "frame 1" \
         ".*in call_me \\(i=3, f=5, s=({a = 3, b = 5}|<value optimized out>), ss=0x\[0-9a-f\]\+, u=({.*}|<value optimized out>), e=green\\) at .*frame-args\\.c:.*" \
         "frame 1 with print frame-arguments set to all"

# Test with "print frame-arguments" set to "scalars"

gdb_test "set print frame-arguments scalars" \
         "" \
         "set print frame-arguments scalars"
gdb_test "frame 1" \
         ".*in call_me \\(i=3, f=5, s=\\.\\.\\., ss=0x\[0-9a-f\]\+, u=\\.\\.\\., e=green\\) at .*frame-args\\.c:.*" \
         "frame 1 with print frame-arguments set to scalars"

# Test with "print frame-arguments" set to "none"

gdb_test "set print frame-arguments none" \
         "" \
         "set print frame-arguments none"
gdb_test "frame 1" \
         ".*in call_me \\(i=\\.\\.\\., f=\\.\\.\\., s=\\.\\.\\., ss=\\.\\.\\., u=\\.\\.\\., e=\\.\\.\\.\\) at .*frame-args\\.c:.*" \
         "frame 1 with print frame-arguments set to none"


