#   Copyright 1988-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 special commands (if, while, etc)
#

standard_testfile

if { [prepare_for_testing "failed to prepare" commands run.c {debug additional_flags=-DFAKEARGV}] } {
    return -1
}

# Run to FUNCTION.  If that fails, issue a FAIL and make the caller
# return.

proc runto_or_return {function} {
    if { ![runto factorial] } {
	return -code return
    }
}

proc_with_prefix gdbvar_simple_if_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 0" "set foo"
    # All this test should do is print 0xdeadbeef once.
    gdb_test \
	[multi_line_input \
	     {if $foo == 1} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xdeadbeef" \
	"#1"

    # All this test should do is print 0xfeedface once.
    gdb_test \
	[multi_line_input \
	     {if $foo == 0} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xfeedface" \
	"#2"
}

proc_with_prefix gdbvar_simple_while_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 5" "set foo"
    # This test should print 0xfeedface five times.
    gdb_test \
	[multi_line_input \
	     {while $foo > 0} \
	     {  p/x 0xfeedface} \
	     {  set $foo -= 1} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix gdbvar_complex_if_while_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 4" "set foo"
    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test \
	[multi_line_input \
	     {while $foo > 0} \
	     {  set $foo -= 1} \
	     {  if ($foo % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix progvar_simple_if_test {} {
    global valnum_re

    runto_or_return factorial

    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=5" " = 5" "set value to 5"
    # All this test should do is print 0xdeadbeef once.
    gdb_test \
	[multi_line_input \
	     {if value == 1} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xdeadbeef" \
	"#1"

    # All this test should do is print 0xfeedface once.
    gdb_test \
	[multi_line_input \
	     {if value == 5} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xfeedface" \
	"#2"
}

proc_with_prefix progvar_simple_while_test {} {
    global valnum_re

    runto_or_return factorial

    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=5" " = 5" "set value to 5"
    # This test should print 0xfeedface five times.
    gdb_test \
	[multi_line_input \
	     {while value > 0} \
	     {  p/x 0xfeedface} \
	     {  set value -= 1} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix progvar_complex_if_while_test {} {
    global valnum_re

    runto_or_return factorial

    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=4" " = 4" "set value to 4"
    # This test should alternate between 0xdeadbeef and 0xfeedface two
    # times.
    gdb_test \
	[multi_line_input \
	     {while value > 0} \
	     {  set value -= 1} \
	     {  if (value % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end}] \
	[multi_line \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
}

proc_with_prefix if_while_breakpoint_command_test {} {
    global valnum_re

    runto_or_return factorial

    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=5" " = 5" "set value to 5"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*"

    gdb_test_multiple "commands" "commands" {
	-re "End with" {
	    pass "commands"
	}
    }

    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test \
	[multi_line_input \
	     {while value > 0} \
	     {  set value -= 1} \
	     {  if (value % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end} \
	     {end}] \
	"" \
	"commands part 2"
    gdb_test \
	"continue" \
	[multi_line \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface"] \
	"#1"
    gdb_test "info break" "while.*set.*if.*p/x.*else.*p/x.*end.*"
}

# Test that we can run the inferior from breakpoint commands.
#
# The expected behavior is that all commands after the first "step"
# shall be ignored.  See the gdb manual, "Break Commands",
# subsection "Breakpoint command lists".

proc_with_prefix infrun_breakpoint_command_test {} {
    runto_or_return factorial

    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=6" " = 6" "set value to 6"
    delete_breakpoints
    gdb_test "break factorial if value == 5" "Breakpoint.*at.*"

# infrun_breakpoint_command_test - This test was broken into two parts 
# to get around a synchronization problem in expect.
# part1: issue the gdb command "commands"
# part2: send the list of commands

    set test "commands #1"
    gdb_test_multiple "commands" $test {
	-re "End with" {
	    pass $test
	}
    }
    gdb_test "step\nstep\nstep\nstep\nend" "" \
	"commands #2"

    gdb_test "continue" \
	"Continuing.*.*.*Breakpoint \[0-9\]*, factorial \\(value=5\\).*at.*\[0-9\]*\[      \]*if \\(value > 1\\) \{.*\[0-9\]*\[      \]*value \\*= factorial \\(value - 1\\);.*"
}

proc_with_prefix breakpoint_command_test {} {
    runto_or_return factorial

    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    gdb_test "p value=6" " = 6" "set value to 6"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*"
    gdb_test \
	[multi_line_input \
	     {commands} \
	     {  printf "Now the value is %d\n", value} \
	     {end}] \
	"End with.*" \
	"commands"
    gdb_test "continue" \
	    "Breakpoint \[0-9\]*, factorial.*Now the value is 5"
    gdb_test "print value" " = 5"
}

# Test clearing the commands of several breakpoints with one single "end".
proc_with_prefix breakpoint_clear_command_test {} {
    runto_or_return factorial

    set any "\[^\r\n\]*"
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*"
    gdb_test_no_output "set \$bpnumfactorial = \$bpnum"
    gdb_test "break -q main" "Breakpoint.*at.*"
    gdb_test_no_output "set \$bpnummain = \$bpnum"

    gdb_test \
	[multi_line_input \
	     {commands $bpnumfactorial $bpnummain} \
	     {  print 1234321} \
	     {end}] \
	"End with.*" \
	"set commands of two breakpoints to print 1234321"
    gdb_test "info breakpoints" \
	[multi_line \
	     "${any}What${any}" \
	     "${any}in factorial${any}" \
	     "${any}print 1234321${any}" \
	     "${any}in main${any}" \
	     "${any}print 1234321${any}" \
	    ] \
	"print 1234321 command present in the two breakpoints"
    gdb_test \
	[multi_line_input \
	     {commands $bpnumfactorial $bpnummain} \
	     {end}] \
	"End with.*" \
	"clear the command list of the two breakpoints"
    gdb_test "info breakpoints" \
	[multi_line \
	     "${any}What${any}" \
	     "${any}in factorial${any}" \
	     "${any}in main${any}" \
	    ] \
	"print 1234321 command is not present anymore in the two breakpoints"
    }

# Test a simple user defined command (with arguments)
proc_with_prefix user_defined_command_test {} {
    global valnum_re

    gdb_test_no_output "set \$foo = 4" "set foo"

    gdb_test_multiple "define mycommand" "define mycommand" {
	-re "End with"  {
	    pass "define mycommand"
	}
    }

    # This test should alternate between 0xdeadbeef and 0xfeedface two times.
    gdb_test \
	[multi_line_input \
	     {while $arg0 > 0} \
	     {  set $arg0 -= 1} \
	     {  if ($arg0 % 2) == 1} \
	     {    p/x 0xdeadbeef} \
	     {  else} \
	     {    p/x 0xfeedface} \
	     {  end} \
	     {end} \
	     {end}] \
	"" \
	"enter commands"

    global decimal
    set valnum_re "\\\$$decimal"

    gdb_test \
	{mycommand $foo} \
	[multi_line \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface" \
	     "$valnum_re = 0xdeadbeef" \
	     "$valnum_re = 0xfeedface"] \
	"execute user-defined command"
   gdb_test "show user mycommand" \
	"  while \\\$arg0.*set.*    if \\\(\\\$arg0.*p/x.*    else\[^\n\].*p/x.*    end\[^\n\].*  end\[^\n\].*" \
	   "display user command"

    # Create and test a user-defined command with an empty body.
    gdb_test_multiple "define myemptycommand" "define myemptycommand" {
	-re "End with"  {
	    pass "define myemptycommand"
	}
    }
    gdb_test "end" \
	"" \
	"end definition of user-defined command with empty body"

    gdb_test_no_output "myemptycommand" \
	"execute user-defined empty command"

    gdb_test "show user" \
	"User command \"myemptycommand.*" \
	"display empty command in command list"

    gdb_test "show user myemptycommand" \
	"User command \"myemptycommand.*" \
	"display user-defined empty command"
}

# Test that the case with which the command was defined is preserved.

proc_with_prefix user_defined_command_case_sensitivity {} {
    # Define a first command with mixed case name.
    set test "define Homer-Simpson"
    gdb_test_multiple $test $test {
	    -re "End with"  {
		pass $test
	    }
	}

    gdb_test "print 123\nend" "" "enter commands 1"

    # Define a second command, same name but different case.
    set test "define HomeR-SimpsoN"
    gdb_test_multiple $test $test {
	    -re "End with"  {
		pass $test
	    }
	}

    gdb_test "print 456\nend" "" "enter commands 2"

    gdb_test "Homer-Simpson" " = 123" "execute command Homer-Simpson"
    gdb_test "HomeR-SimpsoN" " = 456" "execute command HomeR-SimpsoN"
    gdb_test "HOMER-SIMPSON" "Undefined command.*" "try to call in upper case"
    gdb_test "homer-simpson" "Undefined command.*" "try to call in lower case"
}

# Test that "eval" in a user-defined command expands $argc/$argN.

proc_with_prefix user_defined_command_args_eval {} {
    gdb_test_multiple "define command_args_eval" \
	"define command_args_eval" {
	    -re "End with"  {
		pass "define"
	    }
	}

    # Make a command that constructs references to $argc and $argN via
    # eval.
    gdb_test \
	[multi_line \
	     {eval "printf \"argc = %%d,\", $arg%c", 'c'} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", $arg%d", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {end}] \
	"" \
	"enter commands"

    gdb_test "command_args_eval 1 2 3" "argc = 3, 1 2 3" "execute command"
}

# Test that the $argc/$argN variables are pushed on/popped from the
# args stack correctly when a user-defined command calls another
# user-defined command (or in this case, recurses).

proc_with_prefix user_defined_command_args_stack_test {} {
    gdb_test_multiple "define args_stack_command" \
	"define args_stack_command" {
	    -re "End with"  {
		pass "define"
	    }
	}

    # Make a command that refers to $argc/$argN before and after
    # recursing.  Also, vary the number of arguments passed to each
    # recursion point.
    gdb_test \
	[multi_line \
	     {printf "before, argc = %d,", $argc} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", $arg%d", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {} \
	     {} \
	     {if $argc == 3} \
	     {  args_stack_command 21 22} \
	     {end} \
	     {if $argc == 2} \
	     {  args_stack_command 11} \
	     {end} \
	     {} \
	     {} \
	     {printf "after, argc = %d,", $argc} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", $arg%d", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {end}] \
	"" \
	"enter commands"

    set expected \
	[multi_line \
	     "before, argc = 3, 31 32 33" \
	     "before, argc = 2, 21 22" \
	     "before, argc = 1, 11" \
	     "after, argc = 1, 11" \
	     "after, argc = 2, 21 22" \
	     "after, argc = 3, 31 32 33"]
    gdb_test "args_stack_command 31 32 33" $expected "execute command"
}

# Test a simple user defined command with many arguments.  GDB <= 7.12
# used to have a hard coded limit of 10 arguments.

proc_with_prefix user_defined_command_manyargs_test {} {
    set test "define command"
    gdb_test_multiple "define manyargs" $test {
	-re "End with"  {
	    pass $test
	}
    }

    # Define a function that doubles its arguments.
    gdb_test \
	[multi_line \
	     {printf "nargs=%d:", $argc} \
	     {set $i = 0} \
	     {while $i < $argc} \
	     {  eval "printf \" %%d\", 2 * $arg%d\n", $i} \
	     {  set $i = $i + 1} \
	     {end} \
	     {printf "\n"} \
	     {end}] \
	"" \
	"enter commands"

    # Some random number of arguments, as long as higher than 10.
    set nargs 100

    set cmd "manyargs"
    for {set i 1} {$i <= $nargs} {incr i} {
	append cmd " $i"
    }

    set expected "nargs=$nargs:"
    for {set i 1} {$i <= $nargs} {incr i} {
	append expected " " [expr 2 * $i]
    }

    gdb_test $cmd $expected "execute command"
}

proc_with_prefix watchpoint_command_test {} {
    global gdb_prompt

    # Disable hardware watchpoints if necessary.
    if [target_info exists gdb,no_hardware_watchpoints] {
	gdb_test_no_output "set can-use-hw-watchpoints 0" ""
    }

    runto_or_return factorial

    delete_breakpoints

    # Verify that we can create a watchpoint, and give it a commands
    # list that continues the inferior.  We set the watchpoint on a
    # local variable, too, so that it self-deletes when the watched
    # data goes out of scope.
    #
    # What should happen is: Each time the watchpoint triggers, it
    # continues the inferior.  Eventually, the watchpoint will self-
    # delete, when the watched variable is out of scope.  But by that
    # time, the inferior should have exited.  GDB shouldn't crash or
    # anything untoward as a result of this.
    #
    set wp_id -1

    gdb_test_multiple "watch local_var" "watch local_var" {
        -re "\[Ww\]atchpoint (\[0-9\]*): local_var.*$gdb_prompt $" {
            set wp_id $expect_out(1,string)
            pass "watch local_var"
        }
    }

    if {$wp_id == -1} {return}

    gdb_test_multiple "commands $wp_id" "begin commands on watch" {
	-re "Type commands for breakpoint.*, one per line.*>$" {
	    pass "begin commands on watch"
	}
    }
    # See the 'No symbol "value...' fail below.  This command will
    # fail if it's executed in the wrong frame.  If adjusting the
    # test, make sure this property holds.
    gdb_test_multiple "print value" "add print command to watch" {
	-re ">$" {
	    pass "add print command to watch"
	}
    }
    gdb_test_multiple "continue" "add continue command to watch" {
	-re ">$" {
	    pass "add continue command to watch"
	}
    }
    gdb_test "end" \
	"" \
	"end commands on watch"

    set test "continue with watch"
    set lno_1 [gdb_get_line_number "commands.exp: hw local_var out of scope" "run.c"]
    set lno_2 [gdb_get_line_number "commands.exp: local_var out of scope"    "run.c"]
    gdb_test_multiple "continue" "$test" {
	-re "No symbol \"value\" in current context.\r\n$gdb_prompt $" {
	    # Happens if GDB actually runs the watchpoints commands,
	    # even though the watchpoint was deleted for not being in
	    # scope.
	    fail $test
	}
	-re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:($lno_1|$lno_2).*$gdb_prompt $" {
	    pass $test
	}
   }
}

proc_with_prefix test_command_prompt_position {} {
    global gdb_prompt
    global valnum_re

    runto_or_return factorial

    # Don't depend upon argument passing, since most simulators don't
    # currently support it.  Bash value variable to be what we want.
    delete_breakpoints
    gdb_test "break factorial" "Breakpoint.*at.*"
    gdb_test "p value=5" ".*" "set value to 5"
    # All this test should do is print 0xdeadbeef once.
    gdb_test \
	[multi_line_input \
	     {if value == 1} \
	     {  p/x 0xfeedface} \
	     {else} \
	     {  p/x 0xdeadbeef} \
	     {end}] \
	"$valnum_re = 0xdeadbeef" \
	"if test"

    # Now let's test for the correct position of the '>' in gdb's
    # prompt for commands.  It should be at the beginning of the line,
    # and not after one space.

    set test "> OK"
    gdb_test_multiple "commands" $test {
	-re "Type commands.*End with.*\[\r\n\]>$" {
	    gdb_test_multiple "printf \"Now the value is %d\\n\", value" $test {
		-re "^printf.*value\r\n>$" {
		    gdb_test_multiple "end" $test {
			-re "^end\r\n$gdb_prompt $" { 
			    pass $test
			}
		    }
		}
	    }
	}
    }
}



proc_with_prefix deprecated_command_test {} {
    gdb_test "maintenance deprecate blah" "Can't find command.*" \
          "tried to deprecate non-existing command"

    gdb_test_no_output "maintenance deprecate p \"new_p\"" "maintenance deprecate p \"new_p\" /1/"
    gdb_test "p 5" \
	    "Warning: 'p', an alias for the command 'print', is deprecated.*Use 'new_p'.*" \
	    "p deprecated warning, with replacement"
    gdb_test "p 5" ".\[0-9\]* = 5.*" "deprecated warning goes away /1/"

    gdb_test_no_output "maintenance deprecate p \"new_p\"" "maintenance deprecate p \"new_p\" /2/"
    gdb_test_no_output "maintenance deprecate print \"new_print\"" 
    gdb_test "p 5" \
	    "Warning: command 'print' \\(p\\) is deprecated.*Use 'new_print'.*" \
	    "both alias and command are deprecated"
    gdb_test "p 5" ".\[0-9\]* = 5.*" "deprecated warning goes away /2/"

    gdb_test_no_output "maintenance deprecate set remote memory-read-packet-size \"srm\" " \
	    "deprecate long command /1/"
    gdb_test "set remote memory-read-packet-size" \
	    "Warning: command 'set remote memory-read-packet-size' is deprecated.*Use 'srm'.*" \
	    "long command deprecated /1/"

    gdb_test_no_output "maintenance deprecate set remote memory-read-packet-size" \
	    "deprecate long command /2/"
    gdb_test "set remote memory-read-packet-size" \
	    "Warning: command 'set remote memory-read-packet-size' is deprecated.*No alternative known.*" \
	    "long command deprecated with no alternative /2/"

    gdb_test "maintenance deprecate" \
	    "\"maintenance deprecate\".*" \
	    "deprecate with no arguments"

    # Test that an alias with a prefix still gives a warning.
    set file1 [standard_output_file xxx_yyy_cmd]
    set fd [open "$file1" w]
    puts $fd \
"define set xxx_yyy
echo in command xxx_yyy\\n
end

alias set qqq_aaa=set xxx_yyy
maintenance deprecate set qqq_aaa"
    close $fd
    gdb_test_no_output "source $file1" \
	"source file containing xxx_yyy command and its alias"
    gdb_test "set qqq_aaa" \
	"Warning: 'set qqq_aaa', an alias for the command 'set xxx_yyy', is deprecated\\.\r\n.*No alternative known\\..*" \
	"deprecated alias with prefix give a warning"

    file delete $file1
}

proc_with_prefix bp_deleted_in_command_test {} {
    global gdb_prompt

    delete_breakpoints

    # Create a breakpoint, and associate a command-list to it, with
    # one command that deletes this breakpoint.
    gdb_test "break factorial" \
             "Breakpoint \[0-9\]+ at .*: file .*run.c, line \[0-9\]+\."
    
    gdb_test_multiple "commands" "begin commands" {
      -re "Type commands for breakpoint.*>$" {
          pass "begin commands"
      }
    }
    gdb_test_multiple "silent" "add silent command" {
        -re ">$" {
	    pass "add silent command"
	}
    }
    gdb_test_multiple "clear factorial" "add clear command" {
        -re ">$" {
	    pass "add clear command"
	}
    }
    gdb_test_multiple "printf \"factorial command-list executed\\n\"" \
	"add printf command" {
        -re ">$" {
	    pass "add printf command"
	}
    }
    gdb_test_multiple "cont" "add cont command" {
        -re ">$" {
	    pass "add cont command"
	}
    }
    gdb_test "end" \
	"" \
	"end commands"

    gdb_run_cmd
    gdb_test "" "factorial command-list executed.*" "run factorial until breakpoint"
}

proc_with_prefix temporary_breakpoint_commands {} {
    delete_breakpoints

    # Create a temporary breakpoint, and associate a commands list to it.
    # This test will verify that this commands list is executed when the
    # breakpoint is hit.
    gdb_test "tbreak factorial" \
	    "Temporary breakpoint \[0-9\]+ at .*: file .*run.c, line \[0-9\]+\." \
	    "breakpoint"

    gdb_test_multiple "commands" \
	"begin commands in bp_deleted_in_command_test" {
	    -re "Type commands for breakpoint.*>$" {
		pass "begin commands"
	    }
	}
    gdb_test_multiple "silent" "add silent tbreak command" {
	-re ">$" {
	    pass "add silent tbreak command"
	}
    }
    gdb_test_multiple "printf \"factorial tbreak commands executed\\n\"" \
	"add printf tbreak command" {
	    -re ">$" {
		pass "add printf tbreak command"
	    }
	}
    gdb_test_multiple "cont" "add cont tbreak command" {
	-re ">$" {
	    pass "add cont tbreak command"
	}
    }
    gdb_test "end" \
	"" \
	"end tbreak commands"

    gdb_run_cmd
    gdb_test "" "factorial tbreak commands executed.*" \
	"run factorial until temporary breakpoint"
}

# Test that GDB can handle $arg0 outside of user functions without
# crashing.
proc_with_prefix stray_arg0_test { } {
    global valnum_re

    gdb_test "print \$arg0" \
	"$valnum_re = void" \
	"#1"

    gdb_test "if 1 == 1\nprint \$arg0\nend" \
	"$valnum_re = void" \
	"#2"

    gdb_test "print \$arg0 = 1" \
	"$valnum_re = 1" \
	"#3"

    gdb_test "print \$arg0" \
	"$valnum_re = 1" \
	"#4"
}

# Test that GDB is able to source a file with an indented comment.
proc_with_prefix source_file_with_indented_comment {} {
    set file1 [standard_output_file file1]

    set fd [open "$file1" w]
    puts $fd \
{define my_fun
    #indented comment
end
echo Done!\n}
    close $fd

    gdb_test "source $file1" "Done!" "source file"
}

# Test that GDB can handle arguments when sourcing files recursively.
# If the arguments are overwritten with ####### then the test has failed.
proc_with_prefix recursive_source_test {} {
    set file1 [standard_output_file file1]
    set file2 [standard_output_file file2]
    set file3 [standard_output_file file3]

    set fd [open "$file1" w]
    puts $fd \
"source $file2
abcdef qwerty"
    close $fd

    set fd [open "$file2" w]
    puts $fd \
"define abcdef
  echo 1: <<<\$arg0>>>\\n
  source $file3
  echo 2: <<<\$arg0>>>\\n
end"
    close $fd

    set fd [open "$file3" w]
    puts $fd \
"echo in file3\\n
#################################################################"
    close $fd

    gdb_test "source $file1" \
	"1: <<<qwerty>>>\[\r\n]+in file3\[\r\n]+2: <<<qwerty>>>" \
	"source file"

    file delete $file1
    file delete $file2
    file delete $file3
}

proc gdb_test_no_prompt { command result msg } {
    set msg "$command - $msg"
    set result "^[string_to_regexp $command]\r\n$result$"
    gdb_test_multiple $command $msg {
	-re "$result" {
	    pass $msg
	    return 1
	}
	-re "\r\n *>$" {
	    fail $msg
	    return 0
	}
    }
    return 0
}

proc_with_prefix if_commands_test {} {
    global gdb_prompt

    gdb_test_no_output "set \$tem = 1" "set \$tem"

    set test "if_commands_test 1"
    gdb_test_no_prompt "if \$tem == 2" { >} $test
    gdb_test_no_prompt "break -q main" { >} $test
    gdb_test_no_prompt "else" { >} $test
    gdb_test_no_prompt "break factorial" { >} $test
    gdb_test_no_prompt "commands" {  >} $test
    gdb_test_no_prompt "silent" {  >} $test
    gdb_test_no_prompt "set \$tem = 3" {  >} $test
    gdb_test_no_prompt "continue" {  >} $test
    gdb_test_multiple "end" "first end - $test" {
	-re " >\$" {
	    pass "first end - $test"
	}
	-re "\r\n>\$" {
	    fail "first end - $test"
	}
    }
    gdb_test_multiple "end" "second end - $test" {
	-re "Breakpoint \[0-9\]+ at .*: file .*run.c, line \[0-9\]+\.\r\n$gdb_prompt $" {
	    pass "second end - $test"
	}
	-re "Undefined command: \"silent\".*$gdb_prompt $" {
	    fail "second end - $test"
	}
    }

    set test "if_commands_test 2"
    gdb_test_no_prompt "if \$tem == 1" { >} $test
    gdb_test_no_prompt "break -q main" { >} $test
    gdb_test_no_prompt "else" { >} $test
    gdb_test_no_prompt "break factorial" { >} $test
    gdb_test_no_prompt "commands" {  >} $test
    gdb_test_no_prompt "silent" {  >} $test
    gdb_test_no_prompt "set \$tem = 3" {  >} $test
    gdb_test_no_prompt "continue" {  >} $test
    gdb_test_multiple "end" "first end - $test" {
	-re " >\$" {
	    pass "first end - $test"
	}
	-re "\r\n>\$" {
	    fail "first end - $test"
	}
    }
    gdb_test_multiple "end" "second end - $test" {
	-re "Breakpoint \[0-9\]+ at .*: file .*run.c, line \[0-9\]+\.\r\n$gdb_prompt $" {
	    pass "second end - $test"
	}
    }
}

# Verify an error during "commands" commands execution will prevent any other
# "commands" from other breakpoints at the same location to be executed.

proc_with_prefix error_clears_commands_left {} {
    set test "hook-stop 1"
    gdb_test_multiple {define hook-stop} $test {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass $test
	}
    }
    set test "hook-stop 1a"
    gdb_test_multiple {echo hook-stop1\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    gdb_test_no_output "end" "hook-stop 1b"

    delete_breakpoints
    gdb_breakpoint "main"

    set test "main commands 1"
    gdb_test_multiple {commands $bpnum} $test {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 1a"
    gdb_test_multiple {echo cmd1\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 1b"
    gdb_test_multiple {errorcommandxy\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    gdb_test_no_output "end" "main commands 1c"

    gdb_breakpoint "main"
    set test "main commands 2"
    gdb_test_multiple {commands $bpnum} $test {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 2a"
    gdb_test_multiple {echo cmd2\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    set test "main commands 2b"
    gdb_test_multiple {errorcommandyz\n} $test {
	-re "\r\n>$" {
	    pass $test
	}
    }
    gdb_test_no_output "end" "main commands 2c"

    gdb_run_cmd
    gdb_test \
	"" \
	[multi_line \
	     "hook-stop1" \
	     ".*" \
	     "cmd1" \
	     "Undefined command: \"errorcommandxy\"\\.  Try \"help\"\\."] \
	"cmd1 error"

    gdb_test {echo idle\n} "\r\nidle" "no cmd2"
}

proc_with_prefix redefine_hook_test {} {
    gdb_test \
	[multi_line_input \
	     "define one"\
	     "end"] \
	"" \
	"define one"

    gdb_test \
	[multi_line_input \
	     "define hook-one" \
	     "echo hibob\\n" \
	     "end"] \
	"" \
	"define hook-one"

    set test "redefine one"
    gdb_test_multiple "define one" $test {
	-re "Redefine command .one.. .y or n. $" {
	    send_gdb "y\n"
	    exp_continue
	}

	-re "End with"  {
	    pass $test
	}
    }

    gdb_test "end" "" "enter commands for one redefinition"

    gdb_test "one" "hibob" "execute one command"
}

proc_with_prefix redefine_backtrace_test {} {
    gdb_test_multiple "define backtrace" "define backtrace" {
	-re "Really redefine built-in command \"backtrace\"\\? \\(y or n\\) $"  {
	    pass "define backtrace"
	}
    }

    gdb_test_multiple "y" "expect response to define backtrace" {
	-re "End with a line saying just \"end\"\\.\r\n>$"  {
	    pass "expect response to define backtrace"
	}
    }

    gdb_test \
	[multi_line_input \
	     "echo hibob\\n" \
	     "end"] \
	"" \
	"enter commands"

    gdb_test "backtrace" "hibob" "execute backtrace command"
    gdb_test "bt" "hibob" "execute bt command"
}

# Test using "if" and "while" without args when building a command list.

proc define_if_without_arg_test {} {
    foreach cmd {if while define} {
	set test "define some_command_$cmd"
	gdb_test_multiple $test $test {
	    -re "End with"  {
		pass $test
	    }
	}

	gdb_test "$cmd" "$cmd command requires an argument." "type $cmd without args"
    }
}

# Test the loop_break command.

proc_with_prefix loop_break_test {} {
    gdb_test_no_output "set \$a = 0" "initialize \$a"
    gdb_test_no_output "set \$total = 0" "initialize \$total"

    gdb_test \
	[multi_line_input \
	     "while \$a < 5" \
	     "  if \$a == 4" \
	     "    loop_break" \
	     "  end" \
	     "  set \$b = 0" \
	     "  while \$b < 5" \
	     "    if \$b == 2" \
	     "      loop_break" \
	     "    end" \
	     "    set \$total = \$total + 1" \
	     "    set \$b = \$b + 1" \
	     "  end" \
	     "  set \$a = \$a + 1" \
	     "end"] \
	"" \
	"run while loop"

    gdb_test "print \$a" " = 4" "validate \$a"
    gdb_test "print \$b" " = 2" "validate \$b"
    gdb_test "print \$total" " = 8" "validate \$total"
}

# Test the loop_continue command.

proc_with_prefix loop_continue_test {} {
    gdb_test_no_output "set \$a = 0" "initialize \$a"
    gdb_test_no_output "set \$total = 0" "initialize \$total"

    gdb_test \
	[multi_line_input \
	     "while \$a < 5" \
	     "  set \$a = \$a + 1" \
	     "  set \$b = 0" \
	     "  if \$a == 4" \
	     "    loop_continue" \
	     "  end" \
	     "  while \$b < 5" \
	     "    set \$b = \$b + 1" \
	     "    if \$b == 2" \
	     "      loop_continue" \
	     "    end" \
	     "    set \$total = \$total + 1" \
	     "  end" \
	     "end"] \
	"" \
	"run while loop"

    gdb_test "print \$a" " = 5" "validate \$a"
    gdb_test "print \$b" " = 5" "validate \$b"
    gdb_test "print \$total" " = 16" "validate \$total"
}

# Test an input line split with a continuation character (backslash)
# while entering a multi-line command (in a secondary prompt).

proc_with_prefix backslash_in_multi_line_command_test {} {
    set dg_ver [dejagnu_version]
    set dg_major [lindex $dg_ver 0]
    set dg_minor [lindex $dg_ver 1]

    # With older versions of DejaGnu, the "\\\n" we send gets replaced with a
    # space, thus breaking the test.  Just skip it in that case.
    if { $dg_major == 1 && $dg_minor < 5 } {
	untested "dejagnu version is too old"
	return
    }

    gdb_breakpoint "main"

    gdb_test_multiple "commands" "commands" {
	-re "End with a line saying just \"end\"\\.\r\n>$" {
	    pass "commands"
	}
    }

    set test "input line split with backslash"
    send_gdb "print \\\nargc\n"
    gdb_test_multiple "" $test {
	-re "^print \\\\\r\nargc\r\n>$" {
	    pass $test
	}
    }

    gdb_test_no_output "end"

    # Input any command, just to be sure the readline state is sane.
    # In PR 21218, this would trigger the infamous:
    # readline: readline_callback_read_char() called with no handler!
    gdb_test "print 1" "" "run command"
}

gdbvar_simple_if_test
gdbvar_simple_while_test
gdbvar_complex_if_while_test
progvar_simple_if_test
progvar_simple_while_test
progvar_complex_if_while_test
if_while_breakpoint_command_test
infrun_breakpoint_command_test
breakpoint_command_test
breakpoint_clear_command_test
user_defined_command_test
user_defined_command_case_sensitivity
user_defined_command_args_eval
user_defined_command_args_stack_test
user_defined_command_manyargs_test
watchpoint_command_test
test_command_prompt_position
deprecated_command_test
bp_deleted_in_command_test
temporary_breakpoint_commands
stray_arg0_test
source_file_with_indented_comment
recursive_source_test
if_commands_test
error_clears_commands_left
redefine_hook_test
backslash_in_multi_line_command_test
define_if_without_arg_test
loop_break_test
loop_continue_test
# This one should come last, as it redefines "backtrace".
redefine_backtrace_test
