# OBSOLETE # Copyright 1992, 1994, 1995 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 if [skip_chill_tests] then { continue }
# OBSOLETE 
# OBSOLETE set testfile "pr-5022"
# OBSOLETE set srcfile ${srcdir}/$subdir/${testfile}.ch
# OBSOLETE set binfile ${objdir}/${subdir}/${testfile}.exe
# OBSOLETE if  { [compile "${srcfile} -g -o ${binfile} ${CHILL_RT0} ${CHILL_LIB}"] != "" } {
# OBSOLETE     perror "Couldn't compile ${srcfile}"
# OBSOLETE     return -1
# 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_reinitialize_dir $srcdir/$subdir
# OBSOLETE     gdb_load $binfile
# OBSOLETE 
# OBSOLETE     gdb_test "set language chill" ""
# OBSOLETE 
# OBSOLETE     # This is needed (at least on SunOS4) to make sure the
# OBSOLETE     # the symbol table is read.
# OBSOLETE     gdb_test "break gdbme.ch:3" ""
# OBSOLETE     gdb_test "delete 1" ""
# OBSOLETE 
# OBSOLETE     gdb_test "set width 0" ""
# OBSOLETE     gdb_test "set print sevenbit-strings" ""
# OBSOLETE 
# OBSOLETE     test_pr_5022
# OBSOLETE }
# OBSOLETE 
# OBSOLETE proc test_pr_5022 {} {
# OBSOLETE     global gdb_prompt
# OBSOLETE     runto dummy_pr_5022
# OBSOLETE     gdb_test "p p" " = NULL" "print NULL pointer"
# OBSOLETE     gdb_test "continue" ""
# OBSOLETE     gdb_test "p p" {= PTR\(H'[0-9a-fA-F]+\)} "print non-NULL pointer"
# OBSOLETE }
# OBSOLETE 
# OBSOLETE do_tests
