1 # Copyright 2015-2025 Free Software Foundation, Inc. 2 3 # This program is free software; you can redistribute it and/or modify 4 # it under the terms of the GNU General Public License as published by 5 # the Free Software Foundation; either version 3 of the License, or 6 # (at your option) any later version. 7 # 8 # This program is distributed in the hope that it will be useful, 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 # GNU General Public License for more details. 12 # 13 # You should have received a copy of the GNU General Public License 14 # along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 # This file is part of the gdb testsuite. 17 18 # 19 # Test nested functions related functionality. 20 # 21 22 standard_testfile 23 24 25 set testcase "nested-subp2" 26 27 if ![support_nested_function_tests] { 28 untested "compiler does not support nested functions" 29 return -1 30 } 31 32 set flags {} 33 lappend flags debug 34 lappend flags additional_flags=-std=gnu99 35 36 set ld_flags ldflags=-Wl,--no-warn-execstack 37 if { [gdb_can_simple_compile ld-flags {int main () { return 0; }} executable \ 38 $ld_flags] } { 39 lappend flags $ld_flags 40 } 41 42 if { [gdb_compile "${srcdir}/${subdir}/${testcase}.c" \ 43 [standard_output_file "${testcase}"] \ 44 executable $flags] != "" } { 45 return -1 46 } 47 48 49 # Run until the variables we are interested in are visible. 50 51 clean_restart "${testcase}" 52 if ![runto_main] { 53 return 54 } 55 56 set bp_location [gdb_get_line_number "STOP" "${testcase}.c"] 57 gdb_test "break ${testcase}.c:${bp_location}" \ 58 "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \ 59 "breakpoint to the STOP marker" 60 61 with_test_prefix "stop at first iteration" { 62 gdb_test "continue" \ 63 "Breakpoint \[0-9\]+, increment .*" \ 64 "continue to the STOP marker" 65 66 # Check we get correct values for both local and non-local variable references. 67 gdb_test "print c" "102 'f'" 68 gdb_test "print count" "0" 69 } 70 71 72 # Same but a little later: make sure we were looking at the proper places. 73 with_test_prefix "stop at second iteration" { 74 gdb_test "continue" \ 75 "Breakpoint \[0-9\]+, increment .*" \ 76 "continue to the STOP marker" 77 gdb_test "print c" "111 'o'" 78 gdb_test "print count" "1" 79 } 80