From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28269 invoked by alias); 28 Oct 2012 22:44:31 -0000 Received: (qmail 28261 invoked by uid 22791); 28 Oct 2012 22:44:30 -0000 X-SWARE-Spam-Status: No, hits=-4.4 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 28 Oct 2012 22:44:20 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1TSbab-0005hj-Ox from Luis_Gustavo@mentor.com ; Sun, 28 Oct 2012 15:44:17 -0700 Received: from NA1-MAIL.mgc.mentorg.com ([147.34.98.181]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Sun, 28 Oct 2012 15:44:17 -0700 Received: from [0.0.0.0] ([172.16.63.104]) by NA1-MAIL.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.3959); Sun, 28 Oct 2012 15:44:16 -0700 Message-ID: <508DB53E.30507@codesourcery.com> Date: Sun, 28 Oct 2012 22:44:00 -0000 From: Luis Machado Reply-To: lgustavo@codesourcery.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.28) Gecko/20120313 Lightning/1.0b2 Thunderbird/3.1.20 MIME-Version: 1.0 To: Tom Tromey CC: Joel Brobecker , gdb-patches@sourceware.org Subject: Re: [PATCH] Fix mi "-var-create" regression References: <5075D4FD.9050900@mentor.com> <20121014171805.GB3050@adacore.com> <507BFF97.2000900@codesourcery.com> <87y5j4ziof.fsf@fleche.redhat.com> In-Reply-To: <87y5j4ziof.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="------------030100000607030508080707" 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: 2012-10/txt/msg00527.txt.bz2 This is a multi-part message in MIME format. --------------030100000607030508080707 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 635 Hi Tom, On 10/17/2012 10:13 PM, Tom Tromey wrote: >>>>>> "Luis" == Luis Machado writes: > > Luis> + && TYPE_CODE (TYPE_TARGET_TYPE (result)) != TYPE_CODE_VOID) > > On further reflection, I have a question and a comment. > > First, perhaps instead of excluding void* here, we should only allow > pointers to structs. That is the only case that has RTTI anyhow. What > do you think? > > Also, I think this needs a check_typedef around TYPE_TARGET_TYPE. > > Tom Thanks for the comments. I've addressed them in this new version, now with a testcase. Hopefully the testcase is well-formed. Thanks, Luis --------------030100000607030508080707 Content-Type: text/x-patch; name="rtti-print-object.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="rtti-print-object.diff" Content-length: 3891 2012-10-15 Luis Machado * value.c (value_actual_type): Check for TYPE_CODE_STRUCT target types. testsuite/ * mi-var-create-rtti.c: New file. * mi-var-create-rtti.exp: New file. Index: gdb/gdb/value.c =================================================================== --- gdb.orig/gdb/value.c 2012-10-28 20:22:13.209235579 -0200 +++ gdb/gdb/value.c 2012-10-28 20:27:07.857218717 -0200 @@ -850,8 +850,12 @@ value_actual_type (struct value *value, result = value_type (value); if (opts.objectprint) { - if (TYPE_CODE (result) == TYPE_CODE_PTR + /* If result's target type is TYPE_CODE_STRUCT, proceed to + fetch its rtti type. */ + if ((TYPE_CODE (result) == TYPE_CODE_PTR || TYPE_CODE (result) == TYPE_CODE_REF) + && TYPE_CODE (check_typedef (TYPE_TARGET_TYPE (result))) + == TYPE_CODE_STRUCT) { struct type *real_type; Index: gdb/gdb/testsuite/gdb.mi/mi-var-create-rtti.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ gdb/gdb/testsuite/gdb.mi/mi-var-create-rtti.c 2012-10-28 19:27:03.241424995 -0200 @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2012 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 . */ + +int +main (void) +{ + int i = 0; + + return i; /* next-line */ +} Index: gdb/gdb/testsuite/gdb.mi/mi-var-create-rtti.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ gdb/gdb/testsuite/gdb.mi/mi-var-create-rtti.exp 2012-10-28 20:21:34.737237782 -0200 @@ -0,0 +1,52 @@ +# Copyright 2012 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 . + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +gdb_exit +if [mi_gdb_start] { + continue +} + +standard_testfile .c +set opts {debug} + +if [build_executable $testfile.exp $testfile $srcfile $opts] { + return -1; +} + +mi_delete_breakpoints +mi_gdb_reinitialize_dir $srcdir/$subdir +mi_gdb_load ${binfile} + +if ![mi_run_to_main] { + untested "could not run to main" + return -1 +} + +# Test creating a register-based variable. We pick +# register SP since it is a pointer to data. This checks +# for a regression when creating MI variables from pointers +# with "print object" enabled. + +# Enable "print object" +mi_gdb_test "-gdb-set print object on" ".*" + +# Test creating a variable for $sp +mi_gdb_test "-var-create sp1 * \$sp" \ + "\\^done,name=\"sp1\",numchild=\"0\",value=\"$hex\",type=\"void \\*\",has_more=\"0\"" \ + "-var-create sp1 * \$sp" +gdb_exit --------------030100000607030508080707--