# Copyright 2015-2020 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 is part of the gdb testsuite.

#
# Test nested functions related functionality.
#

standard_testfile


set testcase "nested-subp1"

if { [gdb_compile "${srcdir}/${subdir}/${testcase}.c" \
                  [standard_output_file "${testcase}"] \
                  executable \
                  [list debug "additional_flags=-std=gnu99"]] != "" } {
    return -1
}


# Run until the variables we are interested in are visible.

clean_restart "${testcase}"
if ![runto_main] {
    perror "could not run to main"
    continue
}

set bp_location [gdb_get_line_number "STOP" "${testcase}.c"]
gdb_test "break ${testcase}.c:${bp_location}" \
         "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \
         "breakpoint to the STOP marker"
gdb_test "continue" \
         "Breakpoint \[0-9\]+, nested .*" \
         "continue to the STOP marker"


# Check we get correct values for both local and non-local variable references.

gdb_test "print i1" "1"
gdb_test "print i2" "2"
