On Thu, 15 Mar 2018, Bin.Cheng wrote: > On Thu, Mar 15, 2018 at 1:07 PM, Jakub Jelinek <ja...@redhat.com> wrote: > > On Thu, Mar 15, 2018 at 01:56:16PM +0100, Richard Biener wrote: > >> The following fixes the C familiy gimplification langhook to not > >> introduce tree sharing which isn't valid during gimplification. > >> For the specific case the tree sharing is introduced by > >> fold_binary_op_with_cond and is reached via convert () eventually > >> folding something. I've kept folding constants here but for the > >> rest defer folding to GIMPLE (the gimplifier already folds most > >> generated stmts). > >> > >> Bootstrapped and tested on x86_64-unknown-linux-gnu, ok for trunk and > >> branches? > Hi, > FYI, this causes below failure. > > Failures: > gcc.target/aarch64/var_shift_mask_1.c
Ok, these look like narrowing only done via convert () and neither fold nor gimple folding. An alternative slightly more expensive patch is the following which I'm now testing on x86_64-unknown-linux-gnu, the above testcase is fixed with it (verified with a cross). Richard. 2018-03-16 Richard Biener <rguent...@suse.de> PR c/84873 * c-gimplify.c (c_gimplify_expr): Revert previous change. Instead unshare the possibly folded expression. Index: gcc/c-family/c-gimplify.c =================================================================== --- gcc/c-family/c-gimplify.c (revision 258584) +++ gcc/c-family/c-gimplify.c (working copy) @@ -245,15 +245,9 @@ c_gimplify_expr (tree *expr_p, gimple_se unsigned_type_node) && !types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (*op1_p)), integer_type_node)) - { - /* ??? Do not use convert () here or fold arbitrary trees - since folding can introduce tree sharing which is not - allowed during gimplification. */ - if (TREE_CODE (*op1_p) == INTEGER_CST) - *op1_p = fold_convert (unsigned_type_node, *op1_p); - else - *op1_p = build1 (NOP_EXPR, unsigned_type_node, *op1_p); - } + /* Make sure to unshare the result, tree sharing is invalid + during gimplification. */ + *op1_p = unshare_expr (convert (unsigned_type_node, *op1_p)); break; } > Bisected to: > > > commit 676d61f64d05af5833ddd471cc99229cedbd59b4 > Author: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> > Date: Thu Mar 15 13:10:24 2018 +0000 > > 2018-03-15 Richard Biener <rguent...@suse.de> > > PR c/84873 > * c-gimplify.c (c_gimplify_expr): Do not fold expressions. > > * c-c++-common/pr84873.c: New testcase. > > > git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258556 > 138bc75d-0d04-0410-961f-82ee72b054a4 > > I will get more information about the failure. > > Thanks, > bin > >> > >> Thanks, > >> Richard. > >> > >> 2018-03-15 Richard Biener <rguent...@suse.de> > >> > >> PR c/84873 > >> * c-gimplify.c (c_gimplify_expr): Do not fold expressions. > >> > >> * c-c++-common/pr84873.c: New testcase. > > > > Ok, thanks. > > > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)