# OBSOLETE # Copyright 1995, 1996, 1997 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 Fred Fish. (fnf@cygnus.com)
# OBSOLETE #                          Martin Pottendorfer (pottendo@aut.alcatel.at)
# OBSOLETE #
# OBSOLETE 
# OBSOLETE if $tracelevel then {
# OBSOLETE 	strace $tracelevel
# OBSOLETE }
# OBSOLETE 
# OBSOLETE if [skip_chill_tests] then { continue }
# OBSOLETE 
# OBSOLETE set testfile "misc"
# 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 # Set the current language to chill.  This counts as a test.  If it
# OBSOLETE # fails, then we skip the other tests.
# OBSOLETE 
# OBSOLETE proc set_lang_chill {} {
# OBSOLETE     global gdb_prompt
# OBSOLETE     global binfile objdir subdir
# OBSOLETE 
# OBSOLETE     verbose "loading file '$binfile'"
# OBSOLETE     gdb_load $binfile
# OBSOLETE 
# OBSOLETE     send_gdb "set language chill\n"
# OBSOLETE     gdb_expect {
# OBSOLETE 	-re ".*$gdb_prompt $" {}
# OBSOLETE 	timeout { fail "set language chill (timeout)" ; return 0 }
# OBSOLETE     }
# OBSOLETE 
# OBSOLETE     return [gdb_test "show language" ".* source language is \"chill\".*" \
# OBSOLETE 	"set language to \"chill\""]
# OBSOLETE }
# 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 
# OBSOLETE gdb_test "set print sevenbit-strings" ".*"
# OBSOLETE 
# OBSOLETE if ![set_lang_chill] then {
# OBSOLETE     runto dummyfunc
# OBSOLETE     # check upper/lower case 
# OBSOLETE     gdb_test "ptype BOOL" " = (bool|BOOL)"
# OBSOLETE     gdb_test "ptype bool" " = (bool|BOOL)"
# OBSOLETE     gdb_test "print otto" " = 42"
# OBSOLETE     gdb_test "print OTTO" " = 42"
# OBSOLETE     gdb_test "print otTO" " = 42"
# OBSOLETE     gdb_test "print OTto" " = 42"
# OBSOLETE     gdb_test "print NULL" " = NULL" "print emptiness literal"
# OBSOLETE 
# OBSOLETE     # This tests PR 8496.
# OBSOLETE     gdb_test {printf "%d %d.",  3+4,2} "7 2." "printf with 2 arguments"
# OBSOLETE 
# OBSOLETE     # This tests GCH/924
# OBSOLETE     gdb_test {print (h'23)} { = 35} "print parantised integer literal"
# OBSOLETE 
# OBSOLETE     # Linux thinks this is at line 6, but is otherwise ok.
# OBSOLETE     setup_xfail "i*86-pc-linux*-gnu"
# OBSOLETE     gdb_test "info line" \
# OBSOLETE 	{Line 7 of .*misc.ch.* at address H'[0-9a-fA-F]+.*}\
# OBSOLETE 	"info about current line"
# OBSOLETE 
# OBSOLETE     # check array () type (expr)
# OBSOLETE     setup_xfail "m68*-*-hpux*"
# OBSOLETE     gdb_test "print array () ubyte (foo)" { = \[\(0:11\): 0\]}
# OBSOLETE 	
# OBSOLETE     send_gdb "set var \$i := foo\n"
# OBSOLETE     gdb_expect -re ".*$gdb_prompt $"
# OBSOLETE     setup_xfail "m68*-*-hpux*"
# OBSOLETE     gdb_test "print/x array () byte (\$i)" { = \[\(0:11\): H'0\]}
# OBSOLETE }
