# Copyright 2010-2021 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/>.

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

standard_testfile .f90
load_lib fortran.exp

if {[skip_fortran_tests]} { return -1 }

if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90 quiet}]} {
    return -1
}

if { ![fortran_runto_main] } {
    perror "Could not run to 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\\."

# Different Fortran compilers use different values for logical true.
# Check how GDB handles this by modifying the underlying value for our
# logical variables and check they still print as true.
foreach_with_prefix var { l l1 l2 l4 l8 } {
    set len [get_integer_valueof "sizeof (${var})" "get sizeof ${var}"]
    set addr [get_hexadecimal_valueof "&l" "get address of ${var}"]

    for { set i 0 } { $i < $len } { incr i } {
	with_test_prefix "byte $i" {
	    gdb_test_no_output "set *((character *) ${addr}) = 0xff" \
		"set contents of byte at offset $i"
	    gdb_test "p l" " = \\.TRUE\\."
	    incr addr
	    set addr [format "0x%x" $addr]
	}
    }
}
