# Copyright 1998-1999, 2007-2012 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/>.

set prototypes 1
set testfile "structs2"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info] {
    return -1;
}

# build the first test case
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    # built the second test case since we can't use prototypes
    warning "Prototypes not supported, rebuilding with -DNO_PROTOTYPES"
    if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DNO_PROTOTYPES}] != "" } {
	untested structs2.exp
	return -1
    }
    set prototypes 0
}

# Start with a fresh gdb.

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

gdb_test_no_output "set width 0"

if { ![runto_main] } then {
    gdb_suppress_tests
}

# Ok, we're finally ready to actually do our tests.

gdb_test "f" \
    ".*bkpt = 0.*" \
    "structs2 sanity check"

gdb_test "break param_reg" \
    "Breakpoint .* at .*" \
    "structs2 breakpoint set"

if [test_compiler_info gcc-3-*] {
  setup_xfail hppa*-* gcc/15860
}
gdb_test "continue" \
    ".*pr_char=120.*pr_uchar=130.*pr_short=32000.*pr_ushort=33000.*bkpt = 1.*" \
    "structs2 continue1"

if [test_compiler_info gcc-3-*] {
  setup_xfail hppa*-* gcc/15860
}
gdb_test "continue" \
    ".*pr_char=-126.*pr_uchar=120.*pr_short=-32536.*pr_ushort=32000.*bkpt = 1.*" \
    "structs2 continue2"

# End of tests.

gdb_stop_suppressing_tests

return 0
