#   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@gnu.org

if $tracelevel {
    strace $tracelevel
}

# If the test directory was not created by configure then skip
# this test.
if ![file isdirectory ${objdir}/${subdir}] then {
    return 0
}

#
# test running programs
#
set prms_id 0
set bug_id 0

set testfile exclfwd
set binfile ${objdir}/${subdir}/${testfile}

foreach file {exclfwd1 exclfwd2} {
    if {[gdb_compile "${srcdir}/${subdir}/${file}.c" "${file}.o" object {debug}] != ""} {
        gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
    }
}

if {[gdb_compile "exclfwd1.o exclfwd2.o" ${binfile} executable {debug}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

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

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 ."
