From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6432 invoked by alias); 7 Nov 2007 20:07:19 -0000 Received: (qmail 6363 invoked by uid 22791); 7 Nov 2007 20:07:18 -0000 X-Spam-Check-By: sourceware.org Received: from main.gmane.org (HELO ciao.gmane.org) (80.91.229.2) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 07 Nov 2007 20:07:12 +0000 Received: from list by ciao.gmane.org with local (Exim 4.43) id 1IprB6-0001mt-3u for gdb-patches@sources.redhat.com; Wed, 07 Nov 2007 20:07:08 +0000 Received: from 77.246.241.246 ([77.246.241.246]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 07 Nov 2007 20:07:08 +0000 Received: from ghost by 77.246.241.246 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 07 Nov 2007 20:07:08 +0000 To: gdb-patches@sources.redhat.com From: Vladimir Prus Subject: Re: Fix crash in -var-delete Date: Wed, 07 Nov 2007 20:07:00 -0000 Message-ID: References: <200711072257.59372.ghost@cs.msu.su> <20071107200024.GA9490@caradoc.them.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart2205823.05VhlNEJvz" Content-Transfer-Encoding: 7Bit User-Agent: KNode/0.10.4 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: 2007-11/txt/msg00138.txt.bz2 --nextPart2205823.05VhlNEJvz Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8Bit Content-length: 242 Daniel Jacobowitz wrote: > On Wed, Nov 07, 2007 at 10:57:59PM +0300, Vladimir Prus wrote: >> The patch and a testcase are attached. OK? > > OK (if you write the changelog) Thanks. Here's what I've checked in (with changelog). - Volodya --nextPart2205823.05VhlNEJvz Content-Type: text/x-diff; name="child_deletion_as_committed.diff" Content-Transfer-Encoding: 8Bit Content-Disposition: attachment; filename="child_deletion_as_committed.diff" Content-length: 3653 Index: ChangeLog =================================================================== RCS file: /cvs/src/src/gdb/ChangeLog,v retrieving revision 1.8910 diff -u -p -r1.8910 ChangeLog --- ChangeLog 7 Nov 2007 06:58:31 -0000 1.8910 +++ ChangeLog 7 Nov 2007 20:05:31 -0000 @@ -1,3 +1,11 @@ +2007-11-07 Vladimir Prus + + Fix crash when a variable object being deleted + has any of its children deleted previously. + + * varobj.c (delete_variable_1): Don't recurse + into deleted children. + 2007-11-07 Markus Deuling * gdbarch.sh (legacy_virtual_frame_pointer): Add gdbarch parameter. Index: varobj.c =================================================================== RCS file: /cvs/src/src/gdb/varobj.c,v retrieving revision 1.96 diff -u -p -r1.96 varobj.c --- varobj.c 27 Sep 2007 18:04:12 -0000 1.96 +++ varobj.c 7 Nov 2007 20:05:32 -0000 @@ -1292,6 +1292,8 @@ delete_variable_1 (struct cpstack **resu for (i = 0; i < VEC_length (varobj_p, var->children); ++i) { varobj_p child = VEC_index (varobj_p, var->children, i); + if (!child) + continue; if (!remove_from_parent_p) child->parent = NULL; delete_variable_1 (resultp, delcountp, child, 0, only_children_p); Index: testsuite/ChangeLog =================================================================== RCS file: /cvs/src/src/gdb/testsuite/ChangeLog,v retrieving revision 1.1483 diff -u -p -r1.1483 ChangeLog --- testsuite/ChangeLog 5 Nov 2007 11:32:31 -0000 1.1483 +++ testsuite/ChangeLog 7 Nov 2007 20:05:37 -0000 @@ -1,3 +1,8 @@ +2007-11-07 Vladimir Prus + + * gdb.mi/mi-var-child.c (do_child_deletion): New. + * gdb.mi/mi-var-child.exp: Run child_deletion tests. + 2007-11-05 Luis Machado * gdb.base/printcmds.exp: New function Index: testsuite/gdb.mi/mi-var-child.c =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-var-child.c,v retrieving revision 1.6 diff -u -p -r1.6 mi-var-child.c --- testsuite/gdb.mi/mi-var-child.c 23 Aug 2007 18:08:49 -0000 1.6 +++ testsuite/gdb.mi/mi-var-child.c 7 Nov 2007 20:05:37 -0000 @@ -306,6 +306,29 @@ do_special_tests (void) incr_a(2); } +struct very_simple_struct +{ + int a; + int b; +}; + +int +do_child_deletion (void) +{ + /*: BEGIN: child_deletion :*/ + struct very_simple_struct s = {1, 2}; + /*: + mi_create_varobj S s "create varobj for s" + mi_list_varobj_children S {{S.a a 0 int} {S.b b 0 int}} \ + "list children of S" + mi_delete_varobj S.a "delete S.a" + mi_delete_varobj S.b "delete S.b" + mi_delete_varobj S "delete S" + :*/ + return 99; + /*: END: child_deletion :*/ +} + int main (int argc, char *argv []) { @@ -313,6 +336,7 @@ main (int argc, char *argv []) do_block_tests (); do_children_tests (); do_special_tests (); + do_child_deletion (); exit (0); } Index: testsuite/gdb.mi/mi-var-child.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-var-child.exp,v retrieving revision 1.26 diff -u -p -r1.26 mi-var-child.exp --- testsuite/gdb.mi/mi-var-child.exp 23 Aug 2007 18:14:19 -0000 1.26 +++ testsuite/gdb.mi/mi-var-child.exp 7 Nov 2007 20:05:37 -0000 @@ -1227,7 +1227,9 @@ mi_gdb_test "-var-update *" \ "\\^done,changelist=\\\[\{name=\"psnp->ptrs.0.next.next.long_ptr\",in_scope=\"true\",type_changed=\"false\"\}\\\]" \ "update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed" +mi_prepare_inline_tests $srcfile +mi_run_inline_test child_deletion mi_gdb_exit --nextPart2205823.05VhlNEJvz--