From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23326 invoked by alias); 30 Aug 2002 21:15:06 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 23316 invoked from network); 30 Aug 2002 21:15:04 -0000 Received: from unknown (HELO valrhona.uglyboxes.com) (64.1.192.220) by sources.redhat.com with SMTP; 30 Aug 2002 21:15:04 -0000 Received: from localhost.localdomain (IDENT:FBqbbZ+ThnKAPPnV4YWTljqcM2b7CQKG@localhost.localdomain [127.0.0.1]) by valrhona.uglyboxes.com (8.11.6/8.11.6) with ESMTP id g7ULHkS30809 for ; Fri, 30 Aug 2002 14:17:46 -0700 Date: Fri, 30 Aug 2002 14:19:00 -0000 From: Keith Seitz X-X-Sender: keiths@valrhona.uglyboxes.com To: gdb-patches@sources.redhat.com Subject: [RFA/MI testsuite] check for known uiout bugs Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2002-08/txt/msg01050.txt.bz2 Hi, This patch adds a test to mi-basics.exp which tests the following uiout bug: $ ./gdb -i=mi -nw -nx -q (gdb) -data-list-register-names -1 ^error,msg="bad register number" (gdb) -data-list-register-names -1 ^error,msg="bad register number" (gdb) -data-list-register-names -1 ^error,msg="bad register number" (gdb) -data-list-register-names -1 ^error,msg="bad register number" (gdb) -data-list-register-names -1 &"../../src/gdb/ui-out.c:130: gdb-internal-error: push_level: Assertion `uiout->level>= 0 && uiout->level < MAX_UI_OUT_LEVELS' failed.\n" ~"An internal GDB error was detected. This may make further\n" ~"debugging unreliable. Quit this debugging session? (y or n) " This happens because the register-handling code does stuff like (pardon pseudo-code): ui_out_list_begin (...); foreach register requested { if register number is invalid return MI_CMD_ERROR ui_out_field_string (uiout, "name", REGISTER_NAME (register)); } ui_out_list_end (uiout); return MI_CMD_DONE; In other words, when an MI error occurs (one that doesn't occur via error()), the uiout still thinks that it is building a list. It fails to reset the uiout to some starting state with uiout->level = 0. Keith ChangeLog 2002-08-30 Keith Seitz * mi-basics.exp (test_generic_problems): New procedure. Add test to check for uiout list/tuple nesting bug. Patch Index: testsuite/gdb.mi/mi-basics.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-basics.exp,v retrieving revision 1.6 diff -p -r1.6 mi-basics.exp *** testsuite/gdb.mi/mi-basics.exp 27 Jun 2001 17:27:07 -0000 1.6 --- testsuite/gdb.mi/mi-basics.exp 30 Aug 2002 21:14:45 -0000 *************** proc test_dir_specification {} { *** 164,173 **** --- 164,195 ---- #exp_internal 0 } + proc test_generic_problems {} { + + # Tests a bug with ui-out and nested uiout types. When + # an error is encountered building a nest typed, like + # lists or tuples, the uiout is not reset to some sane + # state. As a result, uiout still thinks it is building + # this nested type. Execute enough of these errors and + # an assertion failure occurs. This is most obvious + # with invalid register number and the register commands. + # + # It should be sufficient to test call -data-list-register-names + # at least MAX_UIOUT_LEVELS + 1 times. We just assume a really + # high MAX_UIOUT_LEVELS to do this. + set counter 0 + for {set i 0} {$i < 20} {incr i} { + mi_gdb_test "[expr {200 + $counter}]-data-list-register-names -1" \ + {.*^error,msg="bad register number"} \ + "[expr {200 + $counter}]-data-list-register-names -1" + } + } + if [test_mi_interpreter_selection] { test_exec_and_symbol_mi_operatons test_breakpoints_deletion test_dir_specification + test_generic_problems } mi_gdb_exit