The comment for get_formal_tmp_var says that it shouldn't be used for expressions whose value might change between initialization and use, and in this case we're creating a temporary precisely because the value might change, so we should use get_initialized_tmp_var instead.
I also noticed that many callers of get_initialized_tmp_var pass NULL for post_p, so it seems appropriate to make it a default argument. OK for trunk? Tested x86_64-pc-linux-gnu. gcc/cp/ * cp-gimplify.c (cp_gimplify_expr): Use get_initialized_tmp_var. gcc/ * gimplify.h (get_initialized_tmp_var): Add default argument to post_p. --- gcc/gimplify.h | 2 +- gcc/cp/cp-gimplify.c | 2 +- gcc/gimplify.c | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gcc/gimplify.h b/gcc/gimplify.h index 1070006374a..6c997a769cd 100644 --- a/gcc/gimplify.h +++ b/gcc/gimplify.h @@ -57,7 +57,7 @@ extern gbind *gimple_current_bind_expr (void); extern vec<gbind *> gimple_bind_expr_stack (void); extern void gimplify_and_add (tree, gimple_seq *); extern tree get_formal_tmp_var (tree, gimple_seq *); -extern tree get_initialized_tmp_var (tree, gimple_seq *, gimple_seq *, +extern tree get_initialized_tmp_var (tree, gimple_seq *, gimple_seq * = NULL, bool = true); extern void declare_vars (tree, gimple *, bool); extern void gimple_add_tmp_var (tree); diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 154fa70ec06..80754b930b9 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -767,7 +767,7 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) && (TREE_CODE (op1) == CALL_EXPR || (SCALAR_TYPE_P (TREE_TYPE (op1)) && !TREE_CONSTANT (op1)))) - TREE_OPERAND (*expr_p, 1) = get_formal_tmp_var (op1, pre_p); + TREE_OPERAND (*expr_p, 1) = get_initialized_tmp_var (op1, pre_p); } ret = GS_OK; break; diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 836706961f3..7f9100ba97d 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -661,8 +661,9 @@ get_formal_tmp_var (tree val, gimple_seq *pre_p) are as in gimplify_expr. */ tree -get_initialized_tmp_var (tree val, gimple_seq *pre_p, gimple_seq *post_p, - bool allow_ssa) +get_initialized_tmp_var (tree val, gimple_seq *pre_p, + gimple_seq *post_p /* = NULL */, + bool allow_ssa /* = true */) { return internal_get_tmp_var (val, pre_p, post_p, false, allow_ssa); } base-commit: aa45db50a034b266c338b55dee1b412178ea84a7 -- 2.18.1