From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15661 invoked by alias); 28 Dec 2011 00:58:29 -0000 Received: (qmail 15653 invoked by uid 22791); 28 Dec 2011 00:58:28 -0000 X-SWARE-Spam-Status: No, hits=-4.0 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-vw0-f41.google.com (HELO mail-vw0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 28 Dec 2011 00:58:14 +0000 Received: by vbbfn1 with SMTP id fn1so11151927vbb.0 for ; Tue, 27 Dec 2011 16:58:14 -0800 (PST) Received: by 10.52.35.69 with SMTP id f5mr2604998vdj.29.1325033894151; Tue, 27 Dec 2011 16:58:14 -0800 (PST) MIME-Version: 1.0 Received: by 10.52.35.69 with SMTP id f5mr2604993vdj.29.1325033894081; Tue, 27 Dec 2011 16:58:14 -0800 (PST) Received: by 10.220.199.4 with HTTP; Tue, 27 Dec 2011 16:58:14 -0800 (PST) In-Reply-To: <20111227195924.187BF92BF6@kwai.gnat.com> References: <20111227195924.187BF92BF6@kwai.gnat.com> Date: Wed, 28 Dec 2011 01:38:00 -0000 Message-ID: Subject: Re: [RFA] Add testcase for locals identified with FUNCTION::VAR syntax. From: Doug Evans To: Hilfinger@adacore.com Cc: gdb-patches@sourceware.org X-System-Of-Record: true Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-12/txt/msg00858.txt.bz2 On Tue, Dec 27, 2011 at 11:59 AM, Paul Hilfinger wr= ote: > > This test (from Joel Brobecker) stops inside a recursive function > after a few levels of recursion, goes up some frames, and then > accesses a local variable with 'print foo::val' rather than the usual > 'print val' to see if the former pays attention to the selected frame. > > 2011-12-27 =A0Paul Hilfinger =A0 > =A0 =A0 =A0 =A0 =A0 =A0Joel Brobecker > > =A0* gdb.base/recpar.c, gdb.base/recpar.exp: New files. > --- > =A0gdb/testsuite/ChangeLog =A0 =A0 =A0 =A0 =A0 | =A0 =A04 +++ > =A0gdb/testsuite/gdb.base/recpar.c =A0 | =A0 42 +++++++++++++++++++++++++= ++++++++ > =A0gdb/testsuite/gdb.base/recpar.exp | =A0 46 +++++++++++++++++++++++++++= ++++++++++ > =A03 files changed, 92 insertions(+), 0 deletions(-) > =A0create mode 100644 gdb/testsuite/gdb.base/recpar.c > =A0create mode 100644 gdb/testsuite/gdb.base/recpar.exp > > diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog > index e07ac47..e669198 100644 > --- a/gdb/testsuite/ChangeLog > +++ b/gdb/testsuite/ChangeLog > @@ -1,3 +1,7 @@ > +2011-12-27 =A0Paul Hilfinger =A0 > + > + =A0 =A0 =A0 * gdb.base/recpar.c, gdb.base/recpar.exp: New files. > + > =A02011-12-27 =A0Joel Brobecker =A0 > > =A0 =A0 =A0 =A0* gdb.base/dmsym.c, gdb.base/dmsym_main.c, gdb.base/dmsym.= exp: > diff --git a/gdb/testsuite/gdb.base/recpar.c b/gdb/testsuite/gdb.base/rec= par.c > new file mode 100644 > index 0000000..bba5f5a > --- /dev/null > +++ b/gdb/testsuite/gdb.base/recpar.c > @@ -0,0 +1,42 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + =A0 Copyright 2011 Free Software Foundation, Inc. > + > + =A0 This program is free software; you can redistribute it and/or modify > + =A0 it under the terms of the GNU General Public License as published by > + =A0 the Free Software Foundation; either version 3 of the License, or > + =A0 (at your option) any later version. > + > + =A0 This program is distributed in the hope that it will be useful, > + =A0 but WITHOUT ANY WARRANTY; without even the implied warranty of > + =A0 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. =A0See the > + =A0 GNU General Public License for more details. > + > + =A0 You should have received a copy of the GNU General Public License > + =A0 along with this program. =A0If not, see . =A0*/ > + > +int > +foo (int n) > +{ > + =A0int val =3D n; > + > + =A0{ > + =A0 =A0char val =3D n ? 'y' : 'n'; /* Hides upper-level `val'. =A0*/ > + > + =A0 =A0if (val =3D=3D 'y') /* BREAK */ > + =A0 =A0 =A0return n + foo (n - 1); > + =A0} > + > + =A0return 0; > +} > + > +int > +main (void) > +{ > + =A0int res =3D foo (5); > + > + =A0if (res !=3D 15) /* Dummy use of variable res. =A0*/ > + =A0 =A0return 1; > + > + =A0return 0; > +} > diff --git a/gdb/testsuite/gdb.base/recpar.exp b/gdb/testsuite/gdb.base/r= ecpar.exp > new file mode 100644 > index 0000000..22771d2 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/recpar.exp > @@ -0,0 +1,46 @@ > +# Copyright (C) 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. =A0See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. =A0If not, see . > + > +set testfile recpar > +set srcfile ${testfile}.c > +if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } { > + =A0 =A0return -1 > +} > + > +if ![runto_main] { > + =A0 =A0untested ${testfile}.exp > + =A0 =A0return -1 > +} > + > +# Some convenient regular expressions... > +set num "\[0-9\]+" Delete, use $decimal. > +set addr "0x\[0-9a-zA-Z\]+" This could be replaced with $hex, or do "set addr $hex". Either is fine with me. > + > +gdb_test "break $srcfile:[gdb_get_line_number BREAK $srcfile] if n =3D= =3D 3" \ > + =A0 =A0 =A0 =A0 "Breakpoint $num at $addr: file .*recpar\\.c, line $num= \\." > + > +gdb_test "continue" \ > + =A0 =A0 =A0 =A0 "Breakpoint .* foo \\(n=3D3\\) at .*$srcfile:$num.*" > + > +gdb_test "backtrace" \ > + =A0 =A0 =A0 =A0 "#0 +foo \\(n=3D3\\).*\r\n#1.* foo \\(n=3D4\\).*\r\n#2.= * foo \\(n=3D5\\).*#3.* main \\(\\).*" > + > +gdb_test "frame 2" \ > + =A0 =A0 =A0 =A0 "#2 .* foo \\(n=3D5\\) .*" > + > +# In the currently selected frame, n=3D5, and thus foo::val should be 5 > +# as well. > +gdb_test "print foo::val" \ > + =A0 =A0 =A0 =A0 " =3D 5" > -- I notice scope.exp has similar tests. Would it make sense to move this there?