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

# Test for GDB printing a pointer to a type containing a buffer.

if {[skip_fortran_tests]} { return -1 }

standard_testfile ".f90"
load_lib fortran.exp

if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
	 {debug f90}]} {
    return -1
}

if ![fortran_runto_main] {
    return -1
}

# Depending on the compiler being used, the type names can be printed
# differently.
set real4 [fortran_real4]

gdb_breakpoint [gdb_get_line_number "Break Here"]
gdb_continue_to_breakpoint "Break Here"

gdb_test "print buffer" \
    " = \\(PTR TO -> \\( Type l_buffer \\)\\) $hex"
gdb_test "ptype buffer" \
    [multi_line \
	 "type = PTR TO -> \\( Type l_buffer" \
	 "    $real4 :: alpha\\(:\\)" \
	 "End Type l_buffer \\)" ]
gdb_test "ptype buffer%alpha" "type = $real4 \\(5\\)"

# GDB allows pointer types to be dereferenced using '*'.  This is not
# real Fortran syntax, just something extra that GDB supports.
gdb_test "print *buffer" \
    " = \\( alpha = \\(1\\.5, 2\\.5, 3\\.5, 4\\.5, 5\\.5\\) \\)"
gdb_test "ptype *buffer" \
    [multi_line \
	 "type = Type l_buffer" \
	 "    $real4 :: alpha\\(5\\)" \
	 "End Type l_buffer" ]
gdb_test "ptype (*buffer)%alpha" "type = $real4 \\(5\\)"
