From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1344 invoked by alias); 24 Mar 2018 12:33:37 -0000 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 Received: (qmail 1327 invoked by uid 89); 24 Mar 2018 12:33:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-HELO: smtp.polymtl.ca Received: from smtp.polymtl.ca (HELO smtp.polymtl.ca) (132.207.4.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 24 Mar 2018 12:33:34 +0000 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id w2OCXSr0025944 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Sat, 24 Mar 2018 08:33:33 -0400 Received: by simark.ca (Postfix, from userid 112) id 625A11E77E; Sat, 24 Mar 2018 08:33:28 -0400 (EDT) Received: from simark.ca (localhost [127.0.0.1]) by simark.ca (Postfix) with ESMTP id 9E1B01E4B2; Sat, 24 Mar 2018 08:33:27 -0400 (EDT) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Sat, 24 Mar 2018 12:33:00 -0000 From: Simon Marchi To: Pedro Alves Cc: Weimin Pan , gdb-patches@sourceware.org Subject: Re: [PATCH 3 PR gdb/16959] gdb hangs in infinite recursion In-Reply-To: References: <1521840352-75024-1-git-send-email-weimin.pan@oracle.com> Message-ID: <58d0f0759e471fb7862da336ba18bde6@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.3.4 X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Sat, 24 Mar 2018 12:33:28 +0000 X-IsSubscribed: yes X-SW-Source: 2018-03/txt/msg00486.txt.bz2 On 2018-03-24 06:10, Pedro Alves wrote: > On 03/23/2018 09:25 PM, Weimin Pan wrote: > >> - if (TYPE_CODE (type) == TYPE_CODE_STRUCT) >> + struct type *real_type = check_typedef (type); >> + if (TYPE_CODE (real_type) == TYPE_CODE_STRUCT) >> { >> CORE_ADDR *first_dont_print; >> CORE_ADDR addr; >> @@ -658,15 +659,14 @@ cp_print_static_field (struct type *type, >> addr = value_address (val); >> obstack_grow (&dont_print_statmem_obstack, (char *) &addr, >> sizeof (CORE_ADDR)); >> - type = check_typedef (type); >> - cp_print_value_fields (type, value_enclosing_type (val), >> + cp_print_value_fields (real_type, value_enclosing_type (val), > > This is still passing the resolved type down instead of the > original type. I did not point this out because cp_print_value_fields does a check_typedef anyway, so it doesn't change anything. But it's true that to be consistent it would be better to always pass down the original type, and let the callee decide whether it wants to resolve the typedef or not. Please consider this comment when preparing the next version. Thanks, Simon