#   Copyright 2004, 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/>.

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org

#
# test running programs
#

standard_testfile exclfwd1.c exclfwd2.c

if {[prepare_for_testing $testfile.exp $testfile \
	 [list $srcfile $srcfile2] debug]} {
    return -1
}

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

get_debug_format

set eol "\[ \t\]*\[\n\r\]+"

gdb_test "ptype v1" "type = struct a {$eol
    int x;$eol
    int y;$eol
}$eol"

if { [test_debug_format "stabs"] } then {
    setup_kfail "gdb/1602" *-*-*
}
gdb_test "ptype v2" "type = struct a {$eol
    const char .c;$eol
}$eol"

if { [test_debug_format "stabs"] } then {
    setup_kfail "gdb/1603" *-*-*
}
gdb_test "ptype v3" "type = const char ."
