Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Phil Muldoon <pmuldoon@redhat.com>
To: gdb-patches@sourceware.org
Subject: [patch] [python] mi/12531
Date: Wed, 13 Apr 2011 14:26:00 -0000	[thread overview]
Message-ID: <m3mxjuns7d.fsf@redhat.com> (raw)


This patch fixes a case where an MI user could install a visualizer on a
synthetic varobj.  If we detect that the object is a CPLUS_FAKE_CHILD,
we do not install a visualizer.  I thought about raising an error, but
other MI behavior with fake children is just to move on if possible.  I
did the same.

Cheers

Phil

--

2011-04-13  Phil Muldoon  <pmuldoon@redhat.com>

	* varobj.c (install_default_visualizer): Do not install a
	visualizer if the varobj is CPLUS_FAKE_CHILD.
	(construct_visualizer): Likewise.


2011-04-13  Phil Muldoon  <pmuldoon@redhat.com>

	* gdb.python/py-mi.exp: Add CPLUS_FAKE_CHILD tests and a C++
	compile target.
	* gdb.python/py-prettyprint.exp: Add C++ object for
	CPLUS_FAKE_CHILD test.

--

diff --git a/gdb/testsuite/gdb.python/py-mi.exp b/gdb/testsuite/gdb.python/py-mi.exp
index 629417b..2adb449 100644
--- a/gdb/testsuite/gdb.python/py-mi.exp
+++ b/gdb/testsuite/gdb.python/py-mi.exp
@@ -283,4 +283,42 @@ mi_list_varobj_children nstype2 {
     { {nstype2.<error at 0>} {<error at 0>} 6 {char \[6\]} }
 } "list children after setting exception flag"
 
+# C++ MI tests
+gdb_exit
+if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++ additional_flags=-DMI}] != "" } {
+	untested "Couldn't compile ${srcfile} in c++ mode"
+	return -1
+    }
+
+if [mi_gdb_start] {
+    continue
+}
+mi_delete_breakpoints
+mi_gdb_reinitialize_dir $srcdir/$subdir
+mi_gdb_load ${binfile}
+
+if {[lsearch -exact [mi_get_features] python] < 0} {
+    unsupported "python support is disabled"
+    return -1
+}
+
+mi_runto main
+mi_continue_to_line [gdb_get_line_number {break to inspect struct and union} ${testfile}.c] \
+  "step to breakpoint"
+
+# Test python/12531.  Install visualizer on a cplus_fake_child.
+mi_create_varobj fake fake \
+  "create fake varobj"
+
+mi_list_varobj_children fake {
+    { fake.private private 1 }
+} "list children of fake"
+
+mi_list_varobj_children fake.private {
+    { fake.private.sname sname 2 std::string }
+} "list children fake.private"
+
+mi_gdb_test "-var-set-visualizer fake.private gdb.default_visualizer" \
+    "\\^done" "Install visualizer on a cplus_fake_child"
+
 remote_file host delete ${remote_python_file}
diff --git a/gdb/testsuite/gdb.python/py-prettyprint.c b/gdb/testsuite/gdb.python/py-prettyprint.c
index 5f98433..0b6d216 100644
--- a/gdb/testsuite/gdb.python/py-prettyprint.c
+++ b/gdb/testsuite/gdb.python/py-prettyprint.c
@@ -45,6 +45,8 @@ struct lazystring {
 };
 
 #ifdef __cplusplus
+#include <string>
+
 struct S : public s {
   int zs;
 };
@@ -90,6 +92,16 @@ class Derived : public Vbase1, public Vbase2, public Vbase3
     }
 };
 
+class Fake
+{
+  std::string sname;
+
+ public:
+  Fake (const std::string& name = ""):
+  sname (name)
+  {
+  }
+};
 #endif
 
 struct substruct {
@@ -262,6 +274,7 @@ main ()
 
   Derived derived;
   
+  Fake fake ("foo");
 #endif
 
   add_item (&c, 23);		/* MI breakpoint here */
diff --git a/gdb/varobj.c b/gdb/varobj.c
index bfb3851..1c4c88f 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -1397,6 +1397,11 @@ install_visualizer (struct varobj *var, PyObject *constructor,
 static void
 install_default_visualizer (struct varobj *var)
 {
+
+  /* Do not install a visualizer on a CPLUS_FAKE_CHILD.  */
+  if (CPLUS_FAKE_CHILD (var))
+    return;
+
   if (pretty_printing)
     {
       PyObject *pretty_printer = NULL;
@@ -1429,6 +1434,10 @@ construct_visualizer (struct varobj *var, PyObject *constructor)
 {
   PyObject *pretty_printer;
 
+  /* Do not install a visualizer on a CPLUS_FAKE_CHILD.  */
+  if (CPLUS_FAKE_CHILD (var))
+    return;
+
   Py_INCREF (constructor);
   if (constructor == Py_None)
     pretty_printer = NULL;


             reply	other threads:[~2011-04-13 14:26 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-13 14:26 Phil Muldoon [this message]
2011-04-18 20:58 ` Tom Tromey
2011-04-19 10:47   ` Phil Muldoon
2011-04-19 13:07     ` Tom Tromey
2011-04-29 12:52       ` Phil Muldoon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3mxjuns7d.fsf@redhat.com \
    --to=pmuldoon@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox