# Copyright 2008-2013 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>.

if {[skip_fortran_tests]} {
    return 0
}

standard_testfile .f90

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

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

gdb_breakpoint [gdb_get_line_number "stop-here-out"]
gdb_continue_to_breakpoint "stop-here-out"

# Common block naming with source name /foo/:
#                .symtab  DW_TAG_common_block's DW_AT_name
# Intel Fortran  foo_     foo_
# GNU Fortran    foo_     foo
#set suffix "_"
set suffix ""

set int4 {(integer\(kind=4\)|INTEGER\(4\))}
set real4 {(real\(kind=4\)|REAL\(4\))}
set real8 {(real\(kind=8\)|REAL\(8\))}

gdb_test "whatis foo$suffix" "No symbol \"foo$suffix\" in current context."
gdb_test "ptype foo$suffix" "No symbol \"foo$suffix\" in current context."
gdb_test "p foo$suffix" "No symbol \"foo$suffix\" in current context."
gdb_test "whatis fo_o$suffix" "No symbol \"fo_o$suffix\" in current context."
gdb_test "ptype fo_o$suffix" "No symbol \"fo_o$suffix\" in current context."
gdb_test "p fo_o$suffix" "No symbol \"fo_o$suffix\" in current context."

gdb_test "info locals" "ix_x = 11\r\niy_y = 22\r\niz_z = 33\r\nix = 1\r\niy = 2\r\niz = 3" "info locals out"
gdb_test "info common" "Contents of F77 COMMON block 'fo_o':\r\nix_x = 11\r\niy_y = 22\r\niz_z = 33\r\n\r\nContents of F77 COMMON block 'foo':\r\nix = 1\r\niy = 2\r\niz = 3" "info common out"

gdb_test "ptype ix" "type = $int4" "ptype ix out"
gdb_test "ptype iy" "type = $real4" "ptype iy out"
gdb_test "ptype iz" "type = $real8" "ptype iz out"
gdb_test "ptype ix_x" "type = $int4" "ptype ix_x out"
gdb_test "ptype iy_y" "type = $real4" "ptype iy_y out"
gdb_test "ptype iz_z" "type = $real8" "ptype iz_z out"

gdb_test "p ix" " = 1 *" "p ix out"
gdb_test "p iy" " = 2 *" "p iy out"
gdb_test "p iz" " = 3 *" "p iz out"
gdb_test "p ix_x" " = 11 *" "p ix_x out"
gdb_test "p iy_y" " = 22 *" "p iy_y out"
gdb_test "p iz_z" " = 33 *" "p iz_z out"

gdb_breakpoint [gdb_get_line_number "stop-here-in"]
gdb_continue_to_breakpoint "stop-here-in"

gdb_test "whatis foo$suffix" "No symbol \"foo$suffix\" in current context." "whatis foo$suffix in"
gdb_test "ptype foo$suffix" "No symbol \"foo$suffix\" in current context." "ptype foo$suffix in"
gdb_test "p foo$suffix" "No symbol \"foo$suffix\" in current context." "p foo$suffix in"
gdb_test "whatis fo_o$suffix" "No symbol \"fo_o$suffix\" in current context." "whatis fo_o$suffix in"
gdb_test "ptype fo_o$suffix" "No symbol \"fo_o$suffix\" in current context." "ptype fo_o$suffix in"
gdb_test "p fo_o$suffix" "No symbol \"fo_o$suffix\" in current context." "p fo_o$suffix in"

gdb_test "info locals" "ix = 11\r\niy2 = 22\r\niz = 33\r\nix_x = 1\r\niy_y = 2\r\niz_z2 = 3\r\niy = 5\r\niz_z = 55" "info locals in"
gdb_test "info common" "Contents of F77 COMMON block 'fo_o':\r\nix = 11\r\niy2 = 22\r\niz = 33\r\n\r\nContents of F77 COMMON block 'foo':\r\nix_x = 1\r\niy_y = 2\r\niz_z2 = 3" "info common in"

gdb_test "ptype ix" "type = $int4" "ptype ix in"
gdb_test "ptype iy2" "type = $real4" "ptype iy2 in"
gdb_test "ptype iz" "type = $real8" "ptype iz in"
gdb_test "ptype ix_x" "type = $int4" "ptype ix_x in"
gdb_test "ptype iy_y" "type = $real4" "ptype iy_y in"
gdb_test "ptype iz_z2" "type = $real8" "ptype iz_z2 in"

gdb_test "p ix" " = 11 *" "p ix in"
gdb_test "p iy2" " = 22 *" "p iy2 in"
gdb_test "p iz" " = 33 *" "p iz in"
gdb_test "p ix_x" " = 1 *" "p ix_x in"
gdb_test "p iy_y" " = 2 *" "p iy_y in"
gdb_test "p iz_z2" " = 3 *" "p iz_z2 in"
