# Copyright 2006, 2007, 2008, 2009, 2010, 2011 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 . # This test checks that the if .. else .. end construct works and may # contain empty bodies without crashing. if $tracelevel then { strace $tracelevel } gdb_exit gdb_start # First test that the if command works with an empty body # Test with different conditions because the body is ignored # if it is not executed. # with true condition set message "if 1 with empty body" gdb_test_multiple "if 1\nend" $message { -re "$gdb_prompt $" {pass $message} eof { fail "$message (crashed)" gdb_exit gdb_start } } # with false condition set message "if 0 with empty body" gdb_test_multiple "if 0\nend" $message { -re "$gdb_prompt $" {pass $message} eof { fail "$message (crashed)" gdb_exit gdb_start } } # Second, do the same tests with an empty else body. # This fails in GDB <=6.5 # Unfortunately it was an uninitialised memory problem so # sometimes it just works. Preceed it with an if else end with # bodies and hopefully the memory with be dirty and the problem # will show itself (this works at time of writing). gdb_test "if 1\necho true\\n\nelse\necho false\\n\nend" "true" "" # with true condition set message "if 1 .. else with empty body" gdb_test_multiple "if 1\nelse\nend" $message { -re "$gdb_prompt $" {pass $message} eof { fail "$message (crashed)" gdb_exit gdb_start } } # dirty memory gdb_test "if 1\necho true\\n\nelse\necho false\\n\nend" "true" "" # with false condition set message "if 0 .. else with empty body" gdb_test_multiple "if 0\nelse\nend" $message { -re "$gdb_prompt $" {pass $message} eof { fail "$message (crashed)" gdb_exit gdb_start } } gdb_test_no_output "set confirm off" "" # Test that a define with an empty else can be replaced. # If there is memory corruption then free will fail. # dirty memory gdb_test "if 1\necho true\\n\nelse\necho false\\n\nend" "true" "" # create gdb_test "define abc\nif 1\nelse\nend\nend" "" "create define with empty else" # call (note that condition is 1 so should pass) gdb_test_no_output "abc" "call original define" # replace set message "replace define with if .. else with empty body" gdb_test_multiple "define abc\necho got here\\n\nend" $message { -re "$gdb_prompt $" {pass $message} eof {fail "$message (crashed)"} } # call gdb_test "abc" "got here" "call replacement define"