This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 1/8] Add new test, gdb.base/loop-break.exp
- From: Pedro Alves <palves at redhat dot com>
- To: Kevin Buettner <kevinb at redhat dot com>, gdb-patches at sourceware dot org
- Date: Tue, 25 Aug 2015 13:10:06 +0100
- Subject: Re: [PATCH 1/8] Add new test, gdb.base/loop-break.exp
- Authentication-results: sourceware.org; auth=none
- References: <20150818235334 dot 1afb0c85 at pinnacle dot lan> <20150818235756 dot 23c9d7db at pinnacle dot lan>
On 08/19/2015 07:57 AM, Kevin Buettner wrote:
> index 0000000..3e4b5ca
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/loop-break.c
> @@ -0,0 +1,42 @@
> +volatile int v;
> +volatile int w;
Copyright header missing.
> + v = 0;
> + goto b; /* Loop 4 initial goto */
> +a: v++;
> +b: if (v < 3) goto a; /* Loop 4 condition */
> +}
> +
> +int main (int argc, char **argv)
Line break after first int.
> +{
> + loop_test ();
> +
> + return 0;
> +}
> diff --git a/gdb/testsuite/gdb.base/loop-break.exp b/gdb/testsuite/gdb.base/loop-break.exp
> new file mode 100644
> index 0000000..fef3fcb
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/loop-break.exp
> @@ -0,0 +1,113 @@
> +# Copyright 2015 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/>.
> +
> +# Place breakpoints at various points on several different looping
> +# constructs. Make sure that GDB correctly runs to each of these
> +# breakpoints and that computed values are correct at each point along
> +# the way.
> +
> +standard_testfile
> +
> +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
> + return -1
> +}
> +
> +if ![runto_main] then { fail "loop-break tests suppressed" }
This should return rather than continue into a cascade of failures:
if ![runto_main] then {
fail "Can't run to main"
return 0
}
> +
> +proc break_at { search_string } {
> + global srcfile
> + set bp_location [gdb_get_line_number $search_string]
> + gdb_test "break $bp_location" \
> + "Breakpoint.*at.* file .*$srcfile, line $bp_location\\." \
> + "break $search_string"
> +
> + return $bp_location;
> +}
> +
> +proc continue_to { linenum testname iter } {
> + global srcfile
> + global gdb_prompt
> + set full_name "continue to $testname, $iter"
> +
> + send_gdb "continue\n"
> + gdb_expect {
> + -re "Continuing.*Breakpoint.*$srcfile:$linenum\r\n.*\r\n$gdb_prompt $" {
> + pass $full_name
> + }
> + -re ".*$gdb_prompt $" {
> + fail $full_name
> + }
> + timeout {
> + fail "$full_name (timeout)"
> + }
Use gdb_test_multiple. Or even, gdb_test ?
Thanks,
Pedro Alves