+2016-11-23 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/77739
+ * cp-gimplify.c (cp_gimplify_tree) <case VEC_INIT_EXPR>: Pass
+ false as handle_invisiref_parm_p to cp_genericize_tree.
+ (struct cp_genericize_data): Add handle_invisiref_parm_p field.
+ (cp_genericize_r): Don't wrap is_invisiref_parm into references
+ if !wtd->handle_invisiref_parm_p.
+ (cp_genericize_tree): Add handle_invisiref_parm_p argument,
+ set wtd.handle_invisiref_parm_p to it.
+ (cp_genericize): Pass true as handle_invisiref_parm_p to
+ cp_genericize_tree. Formatting fix.
+
2016-11-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR c++/71973
static tree cp_genericize_r (tree *, int *, void *);
static tree cp_fold_r (tree *, int *, void *);
-static void cp_genericize_tree (tree*);
+static void cp_genericize_tree (tree*, bool);
static tree cp_fold (tree);
/* Local declarations. */
tf_warning_or_error);
hash_set<tree> pset;
cp_walk_tree (expr_p, cp_fold_r, &pset, NULL);
- cp_genericize_tree (expr_p);
+ cp_genericize_tree (expr_p, false);
ret = GS_OK;
input_location = loc;
}
struct cp_genericize_omp_taskreg *omp_ctx;
tree try_block;
bool no_sanitize_p;
+ bool handle_invisiref_parm_p;
};
/* Perform any pre-gimplification folding of C++ front end trees to
}
/* Otherwise, do dereference invisible reference parms. */
- if (is_invisiref_parm (stmt))
+ if (wtd->handle_invisiref_parm_p && is_invisiref_parm (stmt))
{
*stmt_p = convert_from_reference (stmt);
*walk_subtrees = 0;
/* Lower C++ front end trees to GENERIC in T_P. */
static void
-cp_genericize_tree (tree* t_p)
+cp_genericize_tree (tree* t_p, bool handle_invisiref_parm_p)
{
struct cp_genericize_data wtd;
wtd.omp_ctx = NULL;
wtd.try_block = NULL_TREE;
wtd.no_sanitize_p = false;
+ wtd.handle_invisiref_parm_p = handle_invisiref_parm_p;
cp_walk_tree (t_p, cp_genericize_r, &wtd, NULL);
delete wtd.p_set;
wtd.bind_expr_stack.release ();
/* Expand all the array notations here. */
if (flag_cilkplus
&& contains_array_notation_expr (DECL_SAVED_TREE (fndecl)))
- DECL_SAVED_TREE (fndecl) =
- expand_array_notation_exprs (DECL_SAVED_TREE (fndecl));
+ DECL_SAVED_TREE (fndecl)
+ = expand_array_notation_exprs (DECL_SAVED_TREE (fndecl));
/* We do want to see every occurrence of the parms, so we can't just use
walk_tree's hash functionality. */
- cp_genericize_tree (&DECL_SAVED_TREE (fndecl));
+ cp_genericize_tree (&DECL_SAVED_TREE (fndecl), true);
if (flag_sanitize & SANITIZE_RETURN
&& do_ubsan_in_current_function ())