* [patch] Tweak output of -var-info-path-expression
@ 2011-08-05 13:55 Marc Khouzam
2011-08-10 14:47 ` Tom Tromey
0 siblings, 1 reply; 10+ messages in thread
From: Marc Khouzam @ 2011-08-05 13:55 UTC (permalink / raw)
To: 'gdb-patches@sourceware.org'
Hi,
I'd like to re-submit a workaround I posted about a year ago,
but never followed through with.
Full explanation can be found here (with session showing
the problem):
http://sourceware.org/ml/gdb-patches/2010-09/msg00204.html
Basically, because of Bug 11912 "C++ name lookup fails"
using the result of -var-info-path-expression can
sometimes cause a syntax error.
Trying to work around it in Eclipse worries me as we'd have
to create the result of -var-info-path-expression ourselves
in many more cases than just the faulty ones.
Tom was leaning towards this proposed workaround but
suggested a test.
(http://sourceware.org/ml/gdb-patches/2010-09/msg00234.html)
So, here is the patch with a test. The test fails with
the current HEAD (gets the syntax error) and succeeds with
the patch applied. I've also had to update other tests
to match the change.
The actual change is one line but it is not
restricted to MI as the change is in varobj.c.
No regressions (checked with the gdb.sum file :-)).
Thanks
Marc
2011-08-05 Marc Khouzam <marc.khouzam@ericsson.com>
* varobj.c (cplus_describe_child): Add the keyword
'class' to the output of the method when dealing
with a cast to a base class.
2011-08-05 Marc Khouzam <marc.khouzam@ericsson.com>
* gdb.mi/gdb11912.cc: New file.
* gdb.mi/gdb11912.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/gdb11912.cc
===================================================================
RCS file: gdb/testsuite/gdb.mi/gdb11912.cc
diff -N gdb/testsuite/gdb.mi/gdb11912.cc
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb/testsuite/gdb.mi/gdb11912.cc 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,27 @@
+#include <string.h>
+#include <stdio.h>
+
+class A
+{
+ int a;
+};
+
+class C : public A
+{
+ public:
+ C()
+ {
+ };
+ void testLocation()
+ {
+ z = 1;
+ };
+ int z;
+};
+
+int main()
+{
+ C c;
+ c.testLocation();
+ return 0;
+}
Index: gdb/testsuite/gdb.mi/gdb11912.exp
===================================================================
RCS file: gdb/testsuite/gdb.mi/gdb11912.exp
diff -N gdb/testsuite/gdb.mi/gdb11912.exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gdb/testsuite/gdb.mi/gdb11912.exp 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,78 @@
+# 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 <http://www.gnu.org/licenses/>.
+
+#
+# test gdb/11912
+#
+
+if { [skip_cplus_tests] } { continue }
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+gdb_exit
+if [mi_gdb_start] {
+ continue
+}
+
+set testfile gdb11912
+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++}] != ""} {
+ untested gdb11912.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=\".*\"" \
+ "-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]
+if $verbose>1 then {
+ send_user "var-info-path-expression returned $cmd_output\n"
+ send_user "Using $path for data-evaluate-expression\n"
+}
+
+mi_gdb_test "-data-evaluate-expression \"$path\"" \
+ "\\^done,value=\"\{a = \[0-9\]*\}\"" \
+ "-data-evaluate-expression $path"
+
+mi_gdb_exit
+return 0
Index: gdb/testsuite/gdb.mi/mi-var-cp.cc
===================================================================
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 5 Aug 2011 13:42:06 -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=\"\\(\\*\\(Base1\\*\\) dp\\)\"" \
+ "\\^done,path_expr=\"\\(\\*\\(class Base1\\*\\) dp\\)\"" \
"-var-info-path-expression DP.Base1"
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=\"\\(\\(\\(\\*\\(Base1\\*\\) dp\\)\\).i\\)\"" \
+ "\\^done,path_expr=\"\\(\\(\\(\\*\\(class Base1\\*\\) dp\\)\\).i\\)\"" \
"-var-info-path-expression DP.Base1.public.i"
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=\"\\(\\(Base1\\) d\\)\"" \
+ "\\^done,path_expr=\"\\(\\(class Base1\\) d\\)\"" \
"-var-info-path-expression D.Base1"
:*/
int array[4] = {1,2,3};
Index: gdb/varobj.c
===================================================================
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 5 Aug 2011 13:42:06 -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 = xstrprintf ("(%s(%s%s) %s)",
+ 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. */
+ *cfull_expression = xstrprintf ("(%s(class %s%s) %s)",
ptr,
TYPE_FIELD_NAME (type, index),
ptr,
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch] Tweak output of -var-info-path-expression
2011-08-05 13:55 [patch] Tweak output of -var-info-path-expression Marc Khouzam
@ 2011-08-10 14:47 ` Tom Tromey
2011-08-23 13:04 ` Marc Khouzam
0 siblings, 1 reply; 10+ messages in thread
From: Tom Tromey @ 2011-08-10 14:47 UTC (permalink / raw)
To: Marc Khouzam; +Cc: 'gdb-patches@sourceware.org'
>>>>> "Marc" == Marc Khouzam <marc.khouzam@ericsson.com> writes:
Marc> I'd like to re-submit a workaround I posted about a year ago,
Marc> but never followed through with.
Marc> So, here is the patch with a test. The test fails with
Marc> the current HEAD (gets the syntax error) and succeeds with
Marc> the patch applied. I've also had to update other tests
Marc> to match the change.
I think it is reasonable, just a few nits in the patch.
Marc> Index: gdb/testsuite/gdb.mi/gdb11912.cc
Jan has asked that new tests be given descriptive names instead of PR
numbers.
Marc> +if $verbose>1 then {
Marc> + send_user "var-info-path-expression returned $cmd_output\n"
Marc> + send_user "Using $path for data-evaluate-expression\n"
Marc> +}
Just use the verbose command with the level as an argument, like:
verbose "var-info-path-expression returned $cmd_output" 2
(Note no \n as well.)
Marc> + When we are in the scope of the base class or of one
Marc> + of its children, the type field name will be interpreted
Marc> + as a constructor, if it exists. Therefore, we must
Marc> + indicate that the name is a class name by using the
Marc> + 'class' keyword. */
I'd like this comment to have a reference to the PR, either the URL or
"PR mi/11912".
Tom
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [patch] Tweak output of -var-info-path-expression
2011-08-10 14:47 ` Tom Tromey
@ 2011-08-23 13:04 ` Marc Khouzam
2011-08-25 17:44 ` Tom Tromey
2011-08-26 1:48 ` Joel Brobecker
0 siblings, 2 replies; 10+ messages in thread
From: Marc Khouzam @ 2011-08-23 13:04 UTC (permalink / raw)
To: 'Tom Tromey'; +Cc: 'gdb-patches@sourceware.org'
> -----Original Message-----
> From: Tom Tromey [mailto:tromey@redhat.com]
> Sent: Wednesday, August 10, 2011 10:47 AM
> To: Marc Khouzam
> Cc: 'gdb-patches@sourceware.org'
> Subject: Re: [patch] Tweak output of -var-info-path-expression
Sorry about the delay: I was on vacation.
> Marc> Index: gdb/testsuite/gdb.mi/gdb11912.cc
>
> Jan has asked that new tests be given descriptive names instead of PR
> numbers.
Makes sense.
How about "mi-inheritance-syntax-error" as a name for the test files?
> Marc> +if $verbose>1 then {
> Marc> + send_user "var-info-path-expression returned $cmd_output\n"
> Marc> + send_user "Using $path for data-evaluate-expression\n"
> Marc> +}
>
> Just use the verbose command with the level as an argument, like:
>
> verbose "var-info-path-expression returned $cmd_output" 2
>
> (Note no \n as well.)
Didn't know about that.
Done.
> Marc> + When we are in the scope of the base
> class or of one
> Marc> + of its children, the type field name will
> be interpreted
> Marc> + as a constructor, if it exists. Therefore, we must
> Marc> + indicate that the name is a class name by using the
> Marc> + 'class' keyword. */
>
> I'd like this comment to have a reference to the PR, either the URL or
> "PR mi/11912".
Done. I also added "PR mi/11912" to the Changelogs.
No regressions, and I can confirm that the new test fails
before the change and passes after it.
Okay for HEAD?
Do you think it is ok for the 7.3 branch?
Thanks
2011-08-23 Marc Khouzam <marc.khouzam@ericsson.com>
PR mi/11912
* varobj.c (cplus_describe_child): Add the keyword
'class' to the output of the method when dealing
with a cast to a base class.
2011-08-23 Marc Khouzam <marc.khouzam@ericsson.com>
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
===================================================================
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 <string.h>
+#include <stdio.h>
+
+class A
+{
+ int a;
+};
+
+class C : public A
+{
+ public:
+ C()
+ {
+ };
+ void testLocation()
+ {
+ z = 1;
+ };
+ int z;
+};
+
+int main()
+{
+ C c;
+ c.testLocation();
+ return 0;
+}
Index: gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
===================================================================
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:00 -0000
@@ -0,0 +1,77 @@
+# 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 <http://www.gnu.org/licenses/>.
+
+#
+# test gdb/11912
+#
+
+if { [skip_cplus_tests] } { continue }
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+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++}] != ""} {
+ untested gdb11912.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=\".*\"" \
+ "-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=\"\{a = \[0-9\]*\}\"" \
+ "-data-evaluate-expression $path"
+
+mi_gdb_exit
+return 0
Index: gdb/testsuite/gdb.mi/mi-var-cp.cc
===================================================================
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 23 Aug 2011 12:50: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=\"\\(\\*\\(Base1\\*\\) dp\\)\"" \
+ "\\^done,path_expr=\"\\(\\*\\(class Base1\\*\\) dp\\)\"" \
"-var-info-path-expression DP.Base1"
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=\"\\(\\(\\(\\*\\(Base1\\*\\) dp\\)\\).i\\)\"" \
+ "\\^done,path_expr=\"\\(\\(\\(\\*\\(class Base1\\*\\) dp\\)\\).i\\)\"" \
"-var-info-path-expression DP.Base1.public.i"
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=\"\\(\\(Base1\\) d\\)\"" \
+ "\\^done,path_expr=\"\\(\\(class Base1\\) d\\)\"" \
"-var-info-path-expression D.Base1"
:*/
int array[4] = {1,2,3};
Index: gdb/varobj.c
===================================================================
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 23 Aug 2011 12:50: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 = xstrprintf ("(%s(%s%s) %s)",
+ 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. PR mi/11912 */
+ *cfull_expression = xstrprintf ("(%s(class %s%s) %s)",
ptr,
TYPE_FIELD_NAME (type, index),
ptr,
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch] Tweak output of -var-info-path-expression
2011-08-23 13:04 ` Marc Khouzam
@ 2011-08-25 17:44 ` Tom Tromey
2011-08-26 1:48 ` Joel Brobecker
1 sibling, 0 replies; 10+ messages in thread
From: Tom Tromey @ 2011-08-25 17:44 UTC (permalink / raw)
To: Marc Khouzam; +Cc: 'gdb-patches@sourceware.org', Joel Brobecker
>>>>> "Marc" == Marc Khouzam <marc.khouzam@ericsson.com> writes:
Marc> Okay for HEAD?
Yes, thanks.
Marc> Do you think it is ok for the 7.3 branch?
I think it is ok, but I think it is up to Joel whether it should go in
7.3.1 or not.
Tom
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch] Tweak output of -var-info-path-expression
2011-08-23 13:04 ` Marc Khouzam
2011-08-25 17:44 ` Tom Tromey
@ 2011-08-26 1:48 ` Joel Brobecker
2011-08-26 12:36 ` Marc Khouzam
1 sibling, 1 reply; 10+ messages in thread
From: Joel Brobecker @ 2011-08-26 1:48 UTC (permalink / raw)
To: Marc Khouzam; +Cc: 'Tom Tromey', 'gdb-patches@sourceware.org'
> 2011-08-23 Marc Khouzam <marc.khouzam@ericsson.com>
>
> PR mi/11912
> * varobj.c (cplus_describe_child): Add the keyword
> 'class' to the output of the method when dealing
> with a cast to a base class.
>
> 2011-08-23 Marc Khouzam <marc.khouzam@ericsson.com>
>
> 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?
No objection for putting it on 7.3 since Tom thinks it's OK.
One nit:
> + 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. 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.
--
Joel
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [patch] Tweak output of -var-info-path-expression
2011-08-26 1:48 ` Joel Brobecker
@ 2011-08-26 12:36 ` Marc Khouzam
2011-08-26 20:59 ` [patch] testsuite: unreliable gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak output of -var-info-path-expression] Jan Kratochvil
0 siblings, 1 reply; 10+ messages in thread
From: Marc Khouzam @ 2011-08-26 12:36 UTC (permalink / raw)
To: 'Joel Brobecker'
Cc: 'Tom Tromey', 'gdb-patches@sourceware.org'
> -----Original Message-----
> From: Joel Brobecker [mailto:brobecker@adacore.com]
> 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
>
> > 2011-08-23 Marc Khouzam <marc.khouzam@ericsson.com>
> >
> > PR mi/11912
> > * varobj.c (cplus_describe_child): Add the keyword
> > 'class' to the output of the method when dealing
> > with a cast to a base class.
> >
> > 2011-08-23 Marc Khouzam <marc.khouzam@ericsson.com>
> >
> > 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?
>
> 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:
>
> > + 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. 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 <marc.khouzam@ericsson.com>
PR mi/11912
* varobj.c (cplus_describe_child): Add the keyword
'class' to the output of the method when dealing
with a cast to a base class.
2011-08-26 Marc Khouzam <marc.khouzam@ericsson.com>
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
===================================================================
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 <string.h>
+#include <stdio.h>
+
+class A
+{
+ int a;
+};
+
+class C : public A
+{
+ public:
+ C()
+ {
+ };
+ void testLocation()
+ {
+ z = 1;
+ };
+ int z;
+};
+
+int main()
+{
+ C c;
+ c.testLocation();
+ return 0;
+}
Index: gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
===================================================================
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:00 -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 <http://www.gnu.org/licenses/>.
+
+if { [skip_cplus_tests] } { continue }
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi"
+
+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++}] != ""} {
+ 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=\".*\"" \
+ "-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=\"\{a = \[0-9\]*\}\"" \
+ "-data-evaluate-expression $path"
+
+mi_gdb_exit
+return 0
Index: gdb/testsuite/gdb.mi/mi-var-cp.cc
===================================================================
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=\"\\(\\*\\(Base1\\*\\) dp\\)\"" \
+ "\\^done,path_expr=\"\\(\\*\\(class Base1\\*\\) dp\\)\"" \
"-var-info-path-expression DP.Base1"
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=\"\\(\\(\\(\\*\\(Base1\\*\\) dp\\)\\).i\\)\"" \
+ "\\^done,path_expr=\"\\(\\(\\(\\*\\(class Base1\\*\\) dp\\)\\).i\\)\"" \
"-var-info-path-expression DP.Base1.public.i"
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=\"\\(\\(Base1\\) d\\)\"" \
+ "\\^done,path_expr=\"\\(\\(class Base1\\) d\\)\"" \
"-var-info-path-expression D.Base1"
:*/
int array[4] = {1,2,3};
Index: gdb/varobj.c
===================================================================
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 = xstrprintf ("(%s(%s%s) %s)",
+ 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 = xstrprintf ("(%s(class %s%s) %s)",
ptr,
TYPE_FIELD_NAME (type, index),
ptr,
^ permalink raw reply [flat|nested] 10+ messages in thread
* [patch] testsuite: unreliable gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak output of -var-info-path-expression]
2011-08-26 12:36 ` Marc Khouzam
@ 2011-08-26 20:59 ` Jan Kratochvil
2011-08-26 21:04 ` Tom Tromey
0 siblings, 1 reply; 10+ messages in thread
From: Jan Kratochvil @ 2011-08-26 20:59 UTC (permalink / raw)
To: Marc Khouzam
Cc: 'Joel Brobecker', 'Tom Tromey',
'gdb-patches@sourceware.org'
On Fri, 26 Aug 2011 14:35:50 +0200, Marc Khouzam wrote:
> Committed as below to HEAD and the 7.3 branch.
-data-evaluate-expression "(*(class A*) this)"
^done,value="{a = -9296}"
(gdb)
FAIL: gdb.mi/mi-inheritance-syntax-error.exp: -data-evaluate-expression (*(class A*) this)
I guess this part was not the subject of the test but I rather ask, OK to
check-in?
Thanks,
Jan
gdb/testsuite/
2011-08-26 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.mi/mi-inheritance-syntax-error.cc (A): Make `a' public.
(C): Initialize `a'.
* gdb.mi/mi-inheritance-syntax-error.exp
(-data-evaluate-expression $path): Expect `a' as 5.
--- a/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc
+++ b/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.cc
@@ -5,7 +5,8 @@
class A
{
- int a;
+ public:
+ int a;
};
class C : public A
@@ -13,6 +14,7 @@ class C : public A
public:
C()
{
+ a = 5;
};
void testLocation()
{
--- a/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
+++ b/gdb/testsuite/gdb.mi/mi-inheritance-syntax-error.exp
@@ -66,7 +66,7 @@ verbose "Using $path for data-evaluate-expression" 2
mi_gdb_test "-data-evaluate-expression \"$path\"" \
- "\\^done,value=\"\{a = \[0-9\]*\}\"" \
+ "\\^done,value=\"\{a = 5\}\"" \
"-data-evaluate-expression $path"
mi_gdb_exit
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch] testsuite: unreliable gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak output of -var-info-path-expression]
2011-08-26 20:59 ` [patch] testsuite: unreliable gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak output of -var-info-path-expression] Jan Kratochvil
@ 2011-08-26 21:04 ` Tom Tromey
2011-08-26 21:12 ` Jan Kratochvil
0 siblings, 1 reply; 10+ messages in thread
From: Tom Tromey @ 2011-08-26 21:04 UTC (permalink / raw)
To: Jan Kratochvil
Cc: Marc Khouzam, 'Joel Brobecker',
'gdb-patches@sourceware.org'
>>>>> "Jan" == Jan Kratochvil <jan.kratochvil@redhat.com> writes:
Jan> I guess this part was not the subject of the test but I rather ask, OK to
Jan> check-in?
Looks good to me.
Tom
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [patch] testsuite: unreliable gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak output of -var-info-path-expression]
2011-08-26 21:04 ` Tom Tromey
@ 2011-08-26 21:12 ` Jan Kratochvil
2011-08-29 12:16 ` Marc Khouzam
0 siblings, 1 reply; 10+ messages in thread
From: Jan Kratochvil @ 2011-08-26 21:12 UTC (permalink / raw)
To: Tom Tromey
Cc: Marc Khouzam, 'Joel Brobecker',
'gdb-patches@sourceware.org'
On Fri, 26 Aug 2011 23:04:16 +0200, Tom Tromey wrote:
> >>>>> "Jan" == Jan Kratochvil <jan.kratochvil@redhat.com> writes:
>
> Jan> I guess this part was not the subject of the test but I rather ask, OK to
> Jan> check-in?
>
> Looks good to me.
Checked in:
http://sourceware.org/ml/gdb-cvs/2011-08/msg00119.html
Thanks,
Jan
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [patch] testsuite: unreliable gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak output of -var-info-path-expression]
2011-08-26 21:12 ` Jan Kratochvil
@ 2011-08-29 12:16 ` Marc Khouzam
0 siblings, 0 replies; 10+ messages in thread
From: Marc Khouzam @ 2011-08-29 12:16 UTC (permalink / raw)
To: 'Jan Kratochvil', Tom Tromey
Cc: 'Joel Brobecker', 'gdb-patches@sourceware.org'
> -----Original Message-----
> From: Jan Kratochvil [mailto:jan.kratochvil@redhat.com]
> Sent: Friday, August 26, 2011 5:12 PM
> To: Tom Tromey
> Cc: Marc Khouzam; 'Joel Brobecker'; 'gdb-patches@sourceware.org'
> Subject: Re: [patch] testsuite: unreliable
> gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak
> output of -var-info-path-expression]
>
> On Fri, 26 Aug 2011 23:04:16 +0200, Tom Tromey wrote:
> > >>>>> "Jan" == Jan Kratochvil <jan.kratochvil@redhat.com> writes:
> >
> > Jan> I guess this part was not the subject of the test but
> I rather ask, OK to
> > Jan> check-in?
> >
> > Looks good to me.
>
> Checked in:
> http://sourceware.org/ml/gdb-cvs/2011-08/msg00119.html
>
Thanks, and sorry about the extra work.
Marc
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2011-08-29 12:16 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-05 13:55 [patch] Tweak output of -var-info-path-expression Marc Khouzam
2011-08-10 14:47 ` Tom Tromey
2011-08-23 13:04 ` Marc Khouzam
2011-08-25 17:44 ` Tom Tromey
2011-08-26 1:48 ` Joel Brobecker
2011-08-26 12:36 ` Marc Khouzam
2011-08-26 20:59 ` [patch] testsuite: unreliable gdb.mi/mi-inheritance-syntax-error.exp [Re: [patch] Tweak output of -var-info-path-expression] Jan Kratochvil
2011-08-26 21:04 ` Tom Tromey
2011-08-26 21:12 ` Jan Kratochvil
2011-08-29 12:16 ` Marc Khouzam
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox