diff options
author | Richard Biener <rguenther@suse.de> | 2014-10-13 07:58:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-10-13 07:58:05 +0000 |
commit | d4f5cd5e82aca858b37d6cb927874e018bacce6a (patch) | |
tree | f3f3e955cc37835a4a5c65ea164c26f86aee90a4 /gcc/tree-ssa-pre.c | |
parent | 641123eb5e66fc3794eaa102def2da24a36b7da9 (diff) | |
download | gcc-d4f5cd5e82aca858b37d6cb927874e018bacce6a.zip gcc-d4f5cd5e82aca858b37d6cb927874e018bacce6a.tar.gz gcc-d4f5cd5e82aca858b37d6cb927874e018bacce6a.tar.bz2 |
re PR c++/63419 (verify_gimple failed: "vector CONSTRUCTOR element is not a GIMPLE value")
2014-10-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/63419
* gimple-fold.h (gimple_convert): New function.
* gimple-fold.c (gimple_convert): Likewise.
* tree-ssa-pre.c (create_expression_by_pieces): Use gimple_convert
to split out required conversions early.
* g++.dg/torture/pr63419.C: New testcase.
From-SVN: r216138
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index a447c1e..60ff70f 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -2819,12 +2819,15 @@ create_expression_by_pieces (basic_block block, pre_expr expr, if (nary->opcode == POINTER_PLUS_EXPR) { if (i == 0) - genop[i] = fold_convert (nary->type, genop[i]); + genop[i] = gimple_convert (&forced_stmts, + nary->type, genop[i]); else if (i == 1) - genop[i] = convert_to_ptrofftype (genop[i]); + genop[i] = gimple_convert (&forced_stmts, + sizetype, genop[i]); } else - genop[i] = fold_convert (TREE_TYPE (nary->op[i]), genop[i]); + genop[i] = gimple_convert (&forced_stmts, + TREE_TYPE (nary->op[i]), genop[i]); } if (nary->opcode == CONSTRUCTOR) { @@ -2866,8 +2869,10 @@ create_expression_by_pieces (basic_block block, pre_expr expr, statements. We have to call unshare_expr because force_gimple_operand may modify the tree we pass to it. */ - folded = force_gimple_operand (unshare_expr (folded), &forced_stmts, + gimple_seq tem = NULL; + folded = force_gimple_operand (unshare_expr (folded), &tem, false, NULL); + gimple_seq_add_seq_without_update (&forced_stmts, tem); /* If we have any intermediate expressions to the value sets, add them to the value sets and chain them in the instruction stream. */ |