# Copyright 2016-2017 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 testcase is supposed to test DWARF static link which is usually
# used together with nested functions.  

if { [skip_fortran_tests] } { return -1 }

standard_testfile .f90
load_lib "fortran.exp"

if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}]} {
    return -1
}

if ![runto MAIN__] then {
    perror "couldn't run to breakpoint MAIN__"
    continue
}

# Test if we can access local and
# non-local variables defined one level up.
gdb_breakpoint [gdb_get_line_number "! BP_outer"]
gdb_continue_to_breakpoint "! BP_outer" ".*! BP_outer"
gdb_test "print index" "= 13" "print index at BP_outer"
gdb_test "set index = 42"
gdb_test "print index" "= 42" "print index at BP_outer, manipulated"
gdb_test "print local_int" "= 19" "print local_int in outer function"

# Non-local variable should be affected in one frame up as well.
gdb_test "up"
gdb_test "print index" "= 42" "print index at BP1, one frame up"

# Test if we can access local and
# non-local variables defined two level up.
gdb_breakpoint [gdb_get_line_number "! BP_inner"]
gdb_continue_to_breakpoint "! BP_inner" ".*! BP_inner"
gdb_test "print index" "= 42" "print index at BP_inner"
gdb_test "print v_state%code" "= 61" "print v_state%code at BP_inner"
gdb_test "print local_int" "= 17" "print local_int in inner function"

# Test if local variable is still correct.
gdb_breakpoint [gdb_get_line_number "! BP_outer_2"]
gdb_continue_to_breakpoint "! BP_outer_2" ".*! BP_outer_2"
gdb_test "print local_int" "= 19" \
  "print local_int in outer function, after sub_nested_inner"

# Sanity check in main.
gdb_breakpoint [gdb_get_line_number "! BP_main"]
gdb_continue_to_breakpoint "! BP_main" ".*! BP_main"
gdb_test "print index" "= 42" "print index at BP_main"
gdb_test "print v_state%code" "= 59" "print v_state%code at BP_main"
