# Copyright 2007, 2008, 2009, 2010, 2011 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_no_output "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}|<optimized out>), ss=0x\[0-9a-f\]\+, u=({.*}|<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_no_output "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_no_output "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"


