From: Jakub Jelinek Date: Mon, 25 Jun 2018 17:03:26 +0000 (+0200) Subject: backport: re PR tree-optimization/83521 (ICE: verify_gimple failed (error: invalid... X-Git-Tag: releases/gcc-6.5.0~236 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0b181ebb24d0b413a44c4817a4e1f7398209fd9;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/83521 (ICE: verify_gimple failed (error: invalid operand in unary operation)) Backported from mainline 2017-12-21 Jakub Jelinek PR tree-optimization/83521 * tree-ssa-phiopt.c (factor_out_conditional_conversion): Use gimple_build_assign without code on result of fold_build1 (VIEW_CONVERT_EXPR, ...), as it might not create a VIEW_CONVERT_EXPR. * gcc.dg/pr83521.c: New test. From-SVN: r262047 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 78463eccedcf..d67b8dbebdcc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,14 @@ 2018-06-25 Jakub Jelinek Backported from mainline + 2017-12-21 Jakub Jelinek + + PR tree-optimization/83521 + * tree-ssa-phiopt.c (factor_out_conditional_conversion): Use + gimple_build_assign without code on result of + fold_build1 (VIEW_CONVERT_EXPR, ...), as it might not create + a VIEW_CONVERT_EXPR. + 2017-12-19 Jakub Jelinek PR ipa/82801 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 069c4e210336..dd21e51e93c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2018-06-25 Jakub Jelinek Backported from mainline + 2017-12-21 Jakub Jelinek + + PR tree-optimization/83521 + * gcc.dg/pr83521.c: New test. + 2017-12-19 Jakub Jelinek PR ipa/82801 diff --git a/gcc/testsuite/gcc.dg/pr83521.c b/gcc/testsuite/gcc.dg/pr83521.c new file mode 100644 index 000000000000..fc7ca04d1b4b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83521.c @@ -0,0 +1,10 @@ +/* PR tree-optimization/83521 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fno-tree-forwprop" } */ + +int +foo (unsigned int x, int y) +{ + int *z = (int *)&x; + return (y == 0) ? y : *z; +} diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c index fb6e8be43434..5f92ce5d25ad 100644 --- a/gcc/tree-ssa-phiopt.c +++ b/gcc/tree-ssa-phiopt.c @@ -523,8 +523,12 @@ factor_out_conditional_conversion (edge e0, edge e1, gphi *phi, /* Create the conversion stmt and insert it. */ if (convert_code == VIEW_CONVERT_EXPR) - temp = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (result), temp); - new_stmt = gimple_build_assign (result, convert_code, temp); + { + temp = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (result), temp); + new_stmt = gimple_build_assign (result, temp); + } + else + new_stmt = gimple_build_assign (result, convert_code, temp); gsi = gsi_after_labels (gimple_bb (phi)); gsi_insert_before (&gsi, new_stmt, GSI_SAME_STMT);