# Copyright 2010-2023 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

require allow_fortran_tests

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

if { ![fortran_runto_main] } {
    perror "Could not run to main."
    return
}

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]
	}
    }
}
