From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 94187 invoked by alias); 30 Sep 2016 07:48:21 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 94036 invoked by uid 89); 30 Sep 2016 07:48:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: =?ISO-8859-1?Q?No, score=-1.4 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS,URIBL_RED autolearn=no version=3.3.2 spammy=HX-Envelope-From:sk:richard, Gr, Gr=c3=bc=c3, HTo:U*thomas?= X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-wm0-f49.google.com Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com) (74.125.82.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 30 Sep 2016 07:47:58 +0000 Received: by mail-wm0-f49.google.com with SMTP id b4so30244127wmb.0; Fri, 30 Sep 2016 00:47:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=/3LdcWpAdNVweA1umaT8bpi4Reb1SX5z3ze4UAjl+io=; b=TBLuVCBEU9r8FJcz0DrLuarQgbqI9bEqQOWUTdrVOH7hJeK9c5evdQsg3RU5IhxHqJ W5TTmfTgRy7VtL/toYTYDkrHqqNTzxo37VgBS91N4FibGKMa1D39DJkEZU87ep3XL+et zYbWXW7exHEVPbZHWySB3BWWcoCPscJ6n/pb2Xa54DJg2Tut6+7K8fl8r4ZC0pbWnivD E4tRkOOIufpckgb8y4hee2O/mojF9bx87Tgh7JQk31au9jLyJAYJ+kOmi1ixQ27YU4JL slDbCbgweHO6gIg0/SAs0y0/3Yy51tzZijy7hEGhPIM37heBBHQzO7CVEowXs1x/KF+W SwEA== X-Gm-Message-State: AA6/9RnnVk0mIC9dfUiv0hcytxb2cAlWStio/wQAXauFG/O+MwMjxuGmuos1umu/UApfmBGLm+SSyEdxwO5phA== X-Received: by 10.194.200.6 with SMTP id jo6mr5293928wjc.77.1475221676542; Fri, 30 Sep 2016 00:47:56 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.155.210 with HTTP; Fri, 30 Sep 2016 00:47:56 -0700 (PDT) In-Reply-To: <87lgya7odk.fsf@hertz.schwinge.homeip.net> References: <20160817154244.GA39270@arm.com> <87h99s53ls.fsf@kepler.schwinge.homeip.net> <87d1kefwgt.fsf@hertz.schwinge.homeip.net> <87twdgb9zi.fsf@hertz.schwinge.homeip.net> <87poo4as2j.fsf@hertz.schwinge.homeip.net> <87bmzkb0h5.fsf@hertz.schwinge.homeip.net> <87lgya7odk.fsf@hertz.schwinge.homeip.net> From: Richard Biener Date: Fri, 30 Sep 2016 08:10:00 -0000 Message-ID: Subject: Re: Explicitly list all tree codes in gcc/tree-streamer.c:record_common_node (was: [PR lto/77458] Avoid ICE in offloading with differing _FloatN, _FloatNx types) To: Thomas Schwinge Cc: GCC Patches , Joseph Myers , GCC Development , Jakub Jelinek , Bernd Schmidt Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2016-09/txt/msg02316.txt.bz2 On Thu, Sep 29, 2016 at 4:48 PM, Thomas Schwinge wrote: > Hi Richard! > > On Mon, 19 Sep 2016 13:25:01 +0200, Richard Biener wrote: >> On Mon, Sep 19, 2016 at 1:19 PM, Thomas Schwinge >> wrote: >> > On Mon, 19 Sep 2016 10:18:35 +0200, Richard Biener wrote: >> >> On Fri, Sep 16, 2016 at 3:32 PM, Thomas Schwinge >> >> wrote: >> >> > --- gcc/tree-streamer.c >> >> > +++ gcc/tree-streamer.c >> >> > @@ -278,9 +278,23 @@ record_common_node (struct streamer_tree_cache= _d *cache, tree node) >> >> > streamer_tree_cache_append (cache, node, cache->nodes.length ()); >> >> > >> >> > if (POINTER_TYPE_P (node) >> >> > - || TREE_CODE (node) =3D=3D COMPLEX_TYPE >> >> > || TREE_CODE (node) =3D=3D ARRAY_TYPE) >> >> > record_common_node (cache, TREE_TYPE (node)); >> >> > + else if (TREE_CODE (node) =3D=3D COMPLEX_TYPE) >> >> > [...] >> >> > else if (TREE_CODE (node) =3D=3D RECORD_TYPE) > >> [looks to me we miss handling of vector type components alltogether, >> maybe there are no global vector type trees ...] > > Looks like it, yes. Would a patch like the following be reasonable, > which explicitly lists/handles all expected tree codes, or is something > like that not feasible? (That's a subset of tree codes I gathered by a > partial run of the GCC testsuite, and libgomp testsuite; not claiming > this is complete.) I think it would be a nice thing to have indeed. So -- I'm inclined to approve this patch ;) Thanks, Richard. > commit f28dd9618be8a26c6a75ee089f1755e4e0281106 > Author: Thomas Schwinge > Date: Thu Sep 29 16:35:19 2016 +0200 > > Explicitly list all tree codes in gcc/tree-streamer.c:record_common_n= ode > --- > gcc/tree-streamer.c | 32 +++++++++++++++++++++++++------- > 1 file changed, 25 insertions(+), 7 deletions(-) > > diff --git gcc/tree-streamer.c gcc/tree-streamer.c > index 6ada89a..8567a81 100644 > --- gcc/tree-streamer.c > +++ gcc/tree-streamer.c > @@ -303,17 +303,32 @@ record_common_node (struct streamer_tree_cache_d *c= ache, tree node) > in the cache as hash value. */ > streamer_tree_cache_append (cache, node, cache->nodes.length ()); > > - if (POINTER_TYPE_P (node) > - || TREE_CODE (node) =3D=3D ARRAY_TYPE) > - record_common_node (cache, TREE_TYPE (node)); > - else if (TREE_CODE (node) =3D=3D COMPLEX_TYPE) > + switch (TREE_CODE (node)) > { > + case ERROR_MARK: > + case FIELD_DECL: > + case FIXED_POINT_TYPE: > + case IDENTIFIER_NODE: > + case INTEGER_CST: > + case INTEGER_TYPE: > + case POINTER_BOUNDS_TYPE: > + case REAL_TYPE: > + case TREE_LIST: > + case VOID_CST: > + case VOID_TYPE: > + /* No recursion. */ > + break; > + case POINTER_TYPE: > + case REFERENCE_TYPE: > + case ARRAY_TYPE: > + record_common_node (cache, TREE_TYPE (node)); > + break; > + case COMPLEX_TYPE: > /* Verify that a complex type's component type (node_type) has been > handled already (and we thus don't need to recurse here). */ > verify_common_node_recorded (cache, TREE_TYPE (node)); > - } > - else if (TREE_CODE (node) =3D=3D RECORD_TYPE) > - { > + break; > + case RECORD_TYPE: > /* The FIELD_DECLs of structures should be shared, so that every > COMPONENT_REF uses the same tree node when referencing a field. > Pointer equality between FIELD_DECLs is used by the alias > @@ -322,6 +337,9 @@ record_common_node (struct streamer_tree_cache_d *cac= he, tree node) > nonoverlapping_component_refs_of_decl_p). */ > for (tree f =3D TYPE_FIELDS (node); f; f =3D TREE_CHAIN (f)) > record_common_node (cache, f); > + break; > + default: > + gcc_unreachable (); > } > } > > > > Gr=C3=BC=C3=9Fe > Thomas