# Copyright 2009-2012 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 3 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, see <http://www.gnu.org/licenses/>.

# The intent of this testcase is to verify that GDB does not keep
# a filesystem lock on the executable file once the executable
# is no longer running.

set testfile "arrayidx"
set srcfile ${testfile}.c
# $EXEEXT suffix is needed here, because otherwise, Windows targets
# don't find the $binfile for 'file delete $binfile'.
set binfile ${objdir}/${subdir}/${testfile}$EXEEXT

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    untested "Couldn't compile ${srcfile}"
    return -1
}

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

# Sanity-check: Verify that the executable exists. This is just to
# make sure that, when we verify later that the file does not exist,
# it really has been deleted.
if { ! [file exists $binfile] } {
    fail "executable does not exist (${binfile})"
    return -1
    }

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

gdb_continue_to_end

# Try deleting the executable file, now that the program has exited,
# and make sure that the deletion worked by verifying that the exe
# is no longer there (the "file delete" tcl command does not return
# any status, apparently).
file delete $binfile
if { [file exists $binfile] } {
    fail "executable still exists (${binfile})"
    }


