diff options
author | Andrew Stubbs <andrew.stubbs@st.com> | 2006-07-07 12:53:47 +0000 |
---|---|---|
committer | Andrew Stubbs <andrew.stubbs@st.com> | 2006-07-07 12:53:47 +0000 |
commit | 40d2e0e32688c29f36e6d789117995d5b7b5decd (patch) | |
tree | b19dc1d88d62c1d9212a08bd8ab187bbb4faae1d /gdb | |
parent | 71ba23f64d10603f90ea07864b29729107e7ca42 (diff) | |
download | gdb-40d2e0e32688c29f36e6d789117995d5b7b5decd.zip gdb-40d2e0e32688c29f36e6d789117995d5b7b5decd.tar.gz gdb-40d2e0e32688c29f36e6d789117995d5b7b5decd.tar.bz2 |
2006-07-07 Andrew Stubbs <andrew.stubbs@st.com>
* gdb.base/ifelse.exp: New file.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/ifelse.exp | 105 |
2 files changed, 109 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4b6deb6..48a49e1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2006-07-07 Andrew Stubbs <andrew.stubbs@st.com> + + * gdb.base/ifelse.exp: New file. + 2006-07-04 Nathan Sidwell <nathan@codesourcery.com> * gdb.base/huge.c: Allow CRASH_GDB to be set from command diff --git a/gdb/testsuite/gdb.base/ifelse.exp b/gdb/testsuite/gdb.base/ifelse.exp new file mode 100644 index 0000000..fd570a6 --- /dev/null +++ b/gdb/testsuite/gdb.base/ifelse.exp @@ -0,0 +1,105 @@ +# Copyright 2006 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# 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\necho got here\\n" $message { + -re ".*got here.*$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\necho got here\\n" $message { + -re ".*got here.*$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\necho got here\\n" $message { + -re ".*got here.*$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\necho got here\\n" $message { + -re ".*got here.*$gdb_prompt $" {pass $message} + eof { + fail "$message (crashed)" + gdb_exit + gdb_start + } +} + +gdb_test "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 "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" |