# Copyright 2010-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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.

set test "logical"
set srcfile ${test}.f90

if { [prepare_for_testing "${test}.exp" "${test}" "${srcfile}" {debug f90 quiet}] } {
    untested "Could not compile ${srcfile}."
    return -1
}

if { ![runto MAIN__] } {
    perror "Could not run to breakpoint `MAIN__'."
    continue
}

gdb_breakpoint [gdb_get_line_number "stop-here"]
gdb_continue_to_breakpoint "stop-here" ".*stop-here.*"
gdb_test "p l" " = \\.TRUE\\."
gdb_test "p l1" " = \\.TRUE\\."
gdb_test "p l2" " = \\.TRUE\\."
gdb_test "p l4" " = \\.TRUE\\."
gdb_test "p l8" " = \\.TRUE\\."
