From 40d2e0e32688c29f36e6d789117995d5b7b5decd Mon Sep 17 00:00:00 2001 From: Andrew Stubbs Date: Fri, 7 Jul 2006 12:53:47 +0000 Subject: 2006-07-07 Andrew Stubbs * gdb.base/ifelse.exp: New file. --- gdb/testsuite/ChangeLog | 4 ++ gdb/testsuite/gdb.base/ifelse.exp | 105 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 gdb/testsuite/gdb.base/ifelse.exp 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 + + * gdb.base/ifelse.exp: New file. + 2006-07-04 Nathan Sidwell * 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" -- cgit v1.1