From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 113175 invoked by alias); 16 Mar 2016 22:41:55 -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 113157 invoked by uid 89); 16 Mar 2016 22:41:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=317,7, 3177, dereference, Hx-languages-length:2123 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 16 Mar 2016 22:41:53 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (Postfix) with ESMTPS id 324E9804F7; Wed, 16 Mar 2016 22:41:52 +0000 (UTC) Received: from valrhona.uglyboxes.com (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u2GMfpI8019135 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 16 Mar 2016 18:41:51 -0400 From: Keith Seitz Subject: Re: [PATCH v3 09/11] [PR gdb/14441] gdb: convert lvalue reference type check to general reference type check To: Artemiy Volkov , "gdb-patches@sourceware.org ml" References: <1453229609-20159-1-git-send-email-artemiyv@acm.org> <1457147955-21871-1-git-send-email-artemiyv@acm.org> <1457147955-21871-10-git-send-email-artemiyv@acm.org> Message-ID: <56E9E12F.50205@redhat.com> Date: Wed, 16 Mar 2016 22:41:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <1457147955-21871-10-git-send-email-artemiyv@acm.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2016-03/txt/msg00279.txt.bz2 On 03/04/2016 07:19 PM, Artemiy Volkov wrote: > In almost all contexts (except for overload resolution rules and expression > semantics), lvalue and rvalue references are equivalent. That means that in all > but these cases we can replace a TYPE_CODE_REF check to a TYPE_IS_REFERENCE > check and, for switch statements, add a case label for a rvalue reference type > next to a case label for an lvalue reference type. This patch does exactly > that. > diff --git a/gdb/valops.c b/gdb/valops.c > index 1f423a0..30e1c59 100644 > --- a/gdb/valops.c > +++ b/gdb/valops.c > @@ -317,7 +317,7 @@ value_cast_pointers (struct type *type, struct value *arg2, > { > struct value *v2; > > - if (TYPE_CODE (type2) == TYPE_CODE_REF) > + if (TYPE_IS_REFERENCE (type2)) > v2 = coerce_ref (arg2); > else > v2 = value_ind (arg2); > @@ -363,21 +363,21 @@ value_cast (struct type *type, struct value *arg2) > code1 = TYPE_CODE (check_typedef (type)); > code1 isn't used anymore in this early part of the function. It is later unconditionally assigned a new value, so I would just remove this assignment. > /* Check if we are casting struct reference to struct reference. */ > - if (code1 == TYPE_CODE_REF) > + if (TYPE_IS_REFERENCE (check_typedef (type))) > { > /* We dereference type; then we recurse and finally > we generate value of the given reference. Nothing wrong with > that. */ > struct type *t1 = check_typedef (type); > struct type *dereftype = check_typedef (TYPE_TARGET_TYPE (t1)); > - struct value *val = value_cast (dereftype, arg2); > + struct value *val = value_cast (dereftype, arg2); > > return value_ref (val, TYPE_CODE (t1)); > } > > code2 = TYPE_CODE (check_typedef (value_type (arg2))); And I believe the same with code2. It isn't used until later, and by that time, it has been assigned a new value. > > - if (code2 == TYPE_CODE_REF) > + if (TYPE_IS_REFERENCE (check_typedef (value_type (arg2)))) > /* We deref the value and then do the cast. */ > return value_cast (type, coerce_ref (arg2)); > Keith