From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8498 invoked by alias); 26 Aug 2011 12:36:51 -0000 Received: (qmail 8151 invoked by uid 22791); 26 Aug 2011 12:36:49 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from imr4.ericy.com (HELO imr4.ericy.com) (198.24.6.9) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 26 Aug 2011 12:36:30 +0000 Received: from eusaamw0711.eamcs.ericsson.se ([147.117.20.178]) by imr4.ericy.com (8.14.3/8.14.3/Debian-9.1ubuntu1) with ESMTP id p7QCZuYo014551; Fri, 26 Aug 2011 07:35:58 -0500 Received: from EUSAACMS0703.eamcs.ericsson.se ([169.254.1.120]) by eusaamw0711.eamcs.ericsson.se ([147.117.20.178]) with mapi; Fri, 26 Aug 2011 08:35:51 -0400 From: Marc Khouzam To: "'Joel Brobecker'" CC: "'Tom Tromey'" , "'gdb-patches@sourceware.org'" Date: Fri, 26 Aug 2011 12:36:00 -0000 Subject: RE: [patch] Tweak output of -var-info-path-expression Message-ID: References: <20110826014742.GA2843@adacore.com> In-Reply-To: <20110826014742.GA2843@adacore.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 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-08/txt/msg00489.txt.bz2 > -----Original Message----- > From: Joel Brobecker [mailto:brobecker@adacore.com]=20 > Sent: Thursday, August 25, 2011 9:48 PM > To: Marc Khouzam > Cc: 'Tom Tromey'; 'gdb-patches@sourceware.org' > Subject: Re: [patch] Tweak output of -var-info-path-expression >=20 > > 2011-08-23 Marc Khouzam > >=20 > > PR mi/11912 > > * varobj.c (cplus_describe_child): Add the keyword > > 'class' to the output of the method when dealing=20 > > with a cast to a base class. > >=20 > > 2011-08-23 Marc Khouzam > >=20 > > PR mi/11912 > > * gdb.mi/mi-inheritance-syntax-error.cc: New file. > > * gdb.mi/mi-inheritance-syntax-error.exp: New file. > > * gdb.mi/mi-var-cp.cc: Updated for new 'class' > > keyword in output of -var-info-path-expression. > [...] > > Do you think it is ok for the 7.3 branch? >=20 > No objection for putting it on 7.3 since Tom thinks it's OK. Thanks guys. It will make using GDB better for Eclipse. > One nit: >=20 > > + When we are in the scope of the base class or of one > > + of its children, the type field name will be=20 > interpreted > > + as a constructor, if it exists. Therefore, we must > > + indicate that the name is a class name by using the > > + 'class' keyword. PR mi/11912 */ > ^^^^ > Missing second space after a period. I would also follow the general > GCS guideline that everything is a setence, and thus write something > like: `[...] keyword. See PR mi/11912. */'. But that's only if you > agree, it can be seen as a matter of preference. Sure. I put as you suggested: 'keyword. See PR mi/11912 */' Also, I noticed that in the test, I forgot to update the line: untested gdb11912.exp with the new test name. I made this change in the commit: untested mi-inheritance-syntax-error.exp Committed as below to HEAD and the 7.3 branch. Thanks! Marc 2011-08-26 Marc Khouzam PR mi/11912 * varobj.c (cplus_describe_child): Add the keyword 'class' to the output of the method when dealing=20 with a cast to a base class. 2011-08-26 Marc Khouzam PR mi/11912 * gdb.mi/mi-inheritance-syntax-error.cc: New file. * gdb.mi/mi-inheritance-syntax-error.exp: New file. * gdb.mi/mi-var-cp.cc: Updated for new 'class' keyword in output of -var-info-path-expression. ### Eclipse Workspace Patch 1.0 #P src Index: gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc diff -N gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc 1 Jan 1970 00:00:00= -0000 @@ -0,0 +1,29 @@ +// Test for -var-info-path-expression syntax error +// caused by PR 11912 +#include +#include + +class A +{ + int a; +}; + +class C : public A +{ + public: + C() + { + }; + void testLocation() + { + z =3D 1; + }; + int z; +}; + +int main() +{ + C c; + c.testLocation(); + return 0; +} Index: gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp diff -N gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp 1 Jan 1970 00:00:0= 0 -0000 @@ -0,0 +1,73 @@ +# Copyright 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 . + +if { [skip_cplus_tests] } { continue } + +load_lib mi-support.exp +set MIFLAGS "-i=3Dmi" + +gdb_exit +if [mi_gdb_start] { + continue +} + +set testfile mi-inheritance-syntax-error +set srcfile "$testfile.cc" +set binfile $objdir/$subdir/$testfile + +if [get_compiler_info ${binfile} "c++"] { + return -1; +} + +if {[gdb_compile $srcdir/$subdir/$srcfile $binfile executable {debug c++}]= !=3D ""} { + untested mi-inheritance-syntax-error.exp + return -1 +} + +# Test that children of derived classes are given the proper +# path by -var-info-path-expression + +mi_gdb_load ${binfile} +mi_runto C::testLocation + +mi_create_varobj "var1" "this" "create var for THIS" + +mi_list_varobj_children "var1" { + {var1.A A 1 A} + {var1.public public 1} +} "list children of THIS" + +# We don't care what the result of -var-info-path-expression +# as long as it can be used in the -data-evaluate-expression +# that follows +mi_gdb_test "-var-info-path-expression var1.A" \ + "\\^done,path_expr=3D\".*\"" \ + "-var-info-path-expression var1.A" + +# Extract the result of the -var-info-path-expression command +# to use it in -data-evaluate-expression +set cmd_output $expect_out(2,string) +set path [lindex [split $cmd_output "\""] 1] +verbose "var-info-path-expression returned $cmd_output" 2 +verbose "Using $path for data-evaluate-expression" 2 + + +mi_gdb_test "-data-evaluate-expression \"$path\"" \ + "\\^done,value=3D\"\{a =3D \[0-9\]*\}\"" \ + "-data-evaluate-expression $path" + +mi_gdb_exit +return 0 Index: gdb/testsuite/gdb.mi/mi-var-cp.cc =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-var-cp.cc,v retrieving revision 1.13 diff -u -r1.13 mi-var-cp.cc --- gdb/testsuite/gdb.mi/mi-var-cp.cc 1 Jan 2011 15:33:47 -0000 1.13 +++ gdb/testsuite/gdb.mi/mi-var-cp.cc 26 Aug 2011 11:59:05 -0000 @@ -157,7 +157,7 @@ {DP.Base2 Base2 1 Base2} \ {DP.public public 1}} "list children of DP" mi_gdb_test "-var-info-path-expression DP.Base1" \ - "\\^done,path_expr=3D\"\\(\\*\\(Base1\\*\\) dp\\)\"" \ + "\\^done,path_expr=3D\"\\(\\*\\(class Base1\\*\\) dp\\)\"" \ "-var-info-path-expression DP.Base1"=20=20=20=20=20=20=20 mi_list_varobj_children DP.public { \ {DP.public.i i 0 int} \ @@ -172,7 +172,7 @@ {DP.Base1.public.i i 0 int} \ } "list children of DP.Base1.public" mi_gdb_test "-var-info-path-expression DP.Base1.public.i" \ - "\\^done,path_expr=3D\"\\(\\(\\(\\*\\(Base1\\*\\) dp\\)\\).i\\)\= "" \ + "\\^done,path_expr=3D\"\\(\\(\\(\\*\\(class Base1\\*\\) dp\\)\\)= .i\\)\"" \ "-var-info-path-expression DP.Base1.public.i" =20 mi_gdb_test "-var-info-path-expression DP.public" \ @@ -185,7 +185,7 @@ {D.Base2 Base2 1 Base2} \ {D.public public 1}} "list children of D" mi_gdb_test "-var-info-path-expression D.Base1" \ - "\\^done,path_expr=3D\"\\(\\(Base1\\) d\\)\"" \ + "\\^done,path_expr=3D\"\\(\\(class Base1\\) d\\)\"" \ "-var-info-path-expression D.Base1" :*/ int array[4] =3D {1,2,3}; Index: gdb/varobj.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/varobj.c,v retrieving revision 1.181 diff -u -r1.181 varobj.c --- gdb/varobj.c 28 Jul 2011 10:36:40 -0000 1.181 +++ gdb/varobj.c 26 Aug 2011 11:59:05 -0000 @@ -3443,8 +3443,14 @@ will create an lvalue, for all appearences, so we don't need to use more fancy: *(Base1*)(&d) - construct. */ - *cfull_expression =3D xstrprintf ("(%s(%s%s) %s)",=20 + construct. + + When we are in the scope of the base class or of one + of its children, the type field name will be interpreted + as a constructor, if it exists. Therefore, we must + indicate that the name is a class name by using the + 'class' keyword. See PR mi/11912 */ + *cfull_expression =3D xstrprintf ("(%s(class %s%s) %s)",=20 ptr,=20 TYPE_FIELD_NAME (type, index), ptr,