# OBSOLETE # Copyright 1996 Free Software Foundation, Inc.
# OBSOLETE 
# OBSOLETE # This program is free software; you can redistribute it and/or modify
# OBSOLETE # it under the terms of the GNU General Public License as published by
# OBSOLETE # the Free Software Foundation; either version 2 of the License, or
# OBSOLETE # (at your option) any later version.
# OBSOLETE # 
# OBSOLETE # This program is distributed in the hope that it will be useful,
# OBSOLETE # but WITHOUT ANY WARRANTY; without even the implied warranty of
# OBSOLETE # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# OBSOLETE # GNU General Public License for more details.
# OBSOLETE # 
# OBSOLETE # You should have received a copy of the GNU General Public License
# OBSOLETE # along with this program; if not, write to the Free Software
# OBSOLETE # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
# OBSOLETE 
# OBSOLETE # Please email any bugs, comments, and/or additions to this file to:
# OBSOLETE # bug-gdb@prep.ai.mit.edu
# OBSOLETE 
# OBSOLETE # This file was written by Per Bothner. (bothner@cygnus.com)
# OBSOLETE 
# OBSOLETE if $tracelevel then {
# OBSOLETE 	strace $tracelevel
# OBSOLETE }
# OBSOLETE 
# OBSOLETE proc do_tests {} {
# OBSOLETE     global prms_id bug_id subdir objdir srcdir binfile gdb_prompt
# OBSOLETE 
# OBSOLETE     set prms_id 0
# OBSOLETE     set bug_id 0
# OBSOLETE 
# OBSOLETE     # Start with a fresh gdb.
# OBSOLETE 
# OBSOLETE     gdb_exit
# OBSOLETE     gdb_start
# OBSOLETE     gdb_load $binfile
# OBSOLETE 
# OBSOLETE     gdb_test "set language chill" ""
# OBSOLETE     runto pr-9095.ch:12
# OBSOLETE     gdb_test {p v_arr2(5)->.p(5)} "reference value used as function" \
# OBSOLETE 	"bad call using pointer"
# OBSOLETE }
# OBSOLETE 
# OBSOLETE if [skip_chill_tests] then { continue }
# OBSOLETE 
# OBSOLETE # Check to see if we have an executable to test.  If not, then either we
# OBSOLETE # haven't tried to compile one, or the compilation failed for some reason.
# OBSOLETE # In either case, just notify the user and skip the tests in this file.
# OBSOLETE 
# OBSOLETE set testfile "pr-9095"
# OBSOLETE set srcfile ${srcdir}/$subdir/${testfile}.ch
# OBSOLETE set binfile ${objdir}/${subdir}/${testfile}.exe
# OBSOLETE if  { [compile "${srcfile} -g -w -o ${binfile} ${CHILL_RT0} ${CHILL_LIB}"] != "" } {
# OBSOLETE     perror "Couldn't compile ${srcfile}"
# OBSOLETE     return -1
# OBSOLETE }
# OBSOLETE 
# OBSOLETE if ![file exists $binfile] then {
# OBSOLETE     warning "$binfile does not exist; tests suppressed." 0
# OBSOLETE } else {
# OBSOLETE     do_tests
# OBSOLETE }
