From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6555 invoked by alias); 21 Jun 2007 10:07:42 -0000 Received: (qmail 5991 invoked by alias); 21 Jun 2007 10:07:26 -0000 Date: Thu, 21 Jun 2007 10:07:00 -0000 Message-ID: <20070621100726.5990.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug middle-end/20623] ICE: fold check: original tree changed by fold with --enable-checking=fold In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "richard dot guenther at gmail dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-06/txt/msg01883.txt.bz2 ------- Comment #25 from richard dot guenther at gmail dot com 2007-06-21 10:07 ------- Subject: Re: ICE: fold check: original tree changed by fold with --enable-checking=fold On 6/21/07, Sebastian Pop wrote > On 6/21/07, Richard Guenther wrote: > > > > The fold_binary change looks unnecessary. > > ok. > > > The rest is ok. > > > > There was something wrong in the rest, so I'm proposing this fix instead, > as we were not using the modified base anymore for building the result 't'. > > @@ -14191,14 +14220,15 @@ build_fold_addr_expr_with_type (tree t, > } > else > { > - tree base = t; > + tree copy_t = copy_node (t); > + tree base = copy_t; > > while (handled_component_p (base)) > base = TREE_OPERAND (base, 0); > if (DECL_P (base)) > TREE_ADDRESSABLE (base) = 1; > > - t = build1 (ADDR_EXPR, ptrtype, t); > + t = build1 (ADDR_EXPR, ptrtype, copy_t); > } As you noted copying trees here is wrong, too. We can either try to get rid of setting the TREE_ADDRESSABLE flag here or fix fold checking code to ignore this particular change. Note the above code is this way since the tree-ssa merge. Another thing would be to note where we call this helper from fold() routines and not set the flag only for those callers which should be safe. We'd need another flag argument to the function or another wrapper. Richard. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20623