# Copyright 1992, 1994, 1995, 1996 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@prep.ai.mit.edu

# This file was written by Per Bothner. (bothner@cygnus.com)

if $tracelevel then {
	strace $tracelevel
}

if [skip_chill_tests] then { continue }

set testfile2 "pr-5646-grt"
set srcfile2 ${srcdir}/$subdir/${testfile2}.ch
set objfile2 ${objdir}/$subdir/${testfile2}.o
if  { [compile "${srcfile2} -g -c -o ${objfile2}"] != "" } {
    perror "Couldn't compile ${srcfile2}"
    return -1
}

set testfile "pr-5646"
set srcfile ${srcdir}/$subdir/${testfile}.ch
set binfile ${objdir}/${subdir}/${testfile}.exe
if  { [compile "${srcfile} -g ${objfile2} -o ${binfile} ${CHILL_RT0} ${CHILL_LIB}"] != "" } {
    perror "Couldn't compile ${srcfile}"
    return -1
}

proc do_tests {} {
    global prms_id bug_id subdir objdir srcdir binfile gdb_prompt

    set prms_id 0
    set bug_id 0

    # Start with a fresh gdb.

    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir
    gdb_load $binfile

    gdb_test "set language chill" ""

    runto p
    gdb_test "next" ""
    gdb_test_exact "print xx" {= [a:b]}
}

do_tests
