diff options
author | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2017-03-21 13:57:20 +0000 |
---|---|---|
committer | William Schmidt <wschmidt@gcc.gnu.org> | 2017-03-21 13:57:20 +0000 |
commit | 0ffe60b5058fa621288e1dbe12fb588d2c040e5e (patch) | |
tree | ed8f0b3cc75049f7f39d3a6c9acfa2c85581a7ea /gcc/tree-stdarg.c | |
parent | 54eb90fe8a2645ce85266bede939eb0804c1bd80 (diff) | |
download | gcc-0ffe60b5058fa621288e1dbe12fb588d2c040e5e.zip gcc-0ffe60b5058fa621288e1dbe12fb588d2c040e5e.tar.gz gcc-0ffe60b5058fa621288e1dbe12fb588d2c040e5e.tar.bz2 |
re PR tree-optimization/79908 (ICE in gimplify_expr (gimplify.c:12155) gimplification failed)
[gcc]
2017-03-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Richard Biener <rguenth@suse.com>
PR tree-optimization/79908
* tree-stdarg.c (expand_ifn_va_arg_1): For a VA_ARG whose LHS has
been cast away, use force_gimple_operand to construct the side
effects.
[gcc/testsuite]
2017-03-21 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Richard Biener <rguenther@suse.de>
PR tree-optimization/79908
* gcc.dg/torture/pr79908.c: New file.
Co-Authored-By: Richard Biener <rguenth@suse.com>
Co-Authored-By: Richard Biener <rguenther@suse.de>
From-SVN: r246319
Diffstat (limited to 'gcc/tree-stdarg.c')
-rw-r--r-- | gcc/tree-stdarg.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/tree-stdarg.c b/gcc/tree-stdarg.c index 8972822..18dd972 100644 --- a/gcc/tree-stdarg.c +++ b/gcc/tree-stdarg.c @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple-iterator.h" #include "gimple-walk.h" #include "gimplify.h" +#include "gimplify-me.h" #include "tree-into-ssa.h" #include "tree-cfg.h" #include "tree-stdarg.h" @@ -1058,12 +1059,16 @@ expand_ifn_va_arg_1 (function *fun) gimplify_assign (lhs, expr, &pre); } else - gimplify_expr (&expr, &pre, &post, is_gimple_lvalue, fb_lvalue); + { + gimple_seq tmp_seq; + force_gimple_operand (expr, &tmp_seq, false, NULL_TREE); + gimple_seq_add_seq_without_update (&pre, tmp_seq); + } input_location = saved_location; pop_gimplify_context (NULL); - gimple_seq_add_seq (&pre, post); + gimple_seq_add_seq_without_update (&pre, post); update_modified_stmts (pre); /* Add the sequence after IFN_VA_ARG. This splits the bb right @@ -1072,11 +1077,10 @@ expand_ifn_va_arg_1 (function *fun) gimple_find_sub_bbs (pre, &i); /* Remove the IFN_VA_ARG gimple_call. It's the last stmt in the - bb. */ + bb if we added any stmts. */ unlink_stmt_vdef (stmt); release_ssa_name_fn (fun, gimple_vdef (stmt)); gsi_remove (&i, true); - gcc_assert (gsi_end_p (i)); /* We're walking here into the bbs which contain the expansion of IFN_VA_ARG, and will not contain another IFN_VA_ARG that needs |