aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2018-04-30 11:20:46 -0400
committerJason Merrill <jason@gcc.gnu.org>2018-04-30 11:20:46 -0400
commit94b2a1e543ca20ed5e0468a186b27822d98b81b8 (patch)
treee1da0af4455ae5bb9a676b99eeaa2dfd32d2b4c5 /gcc
parent7761dfbee17cb7a4bb3539a381bec63d31af7c28 (diff)
downloadgcc-94b2a1e543ca20ed5e0468a186b27822d98b81b8.zip
gcc-94b2a1e543ca20ed5e0468a186b27822d98b81b8.tar.gz
gcc-94b2a1e543ca20ed5e0468a186b27822d98b81b8.tar.bz2
tree.c (build_clobber): New.
* tree.c (build_clobber): New. * tree.h: Declare it. * gimplify.c (gimplify_bind_expr, gimplify_target_expr): Use it. From-SVN: r259770
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/gimplify.c7
-rw-r--r--gcc/tree.c10
-rw-r--r--gcc/tree.h1
6 files changed, 24 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 74ac8b4..eccb89a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-04-30 Jason Merrill <jason@redhat.com>
+
+ * tree.c (build_clobber): New.
+ * tree.h: Declare it.
+ * gimplify.c (gimplify_bind_expr, gimplify_target_expr): Use it.
+
2018-04-30 David Malcolm <dmalcolm@redhat.com>
* diagnostic-show-locus.c (layout::layout): Update for
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 6253c9b..7e32e75 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2018-04-30 Jason Merrill <jason@redhat.com>
+
+ * decl.c (build_clobber_this): Use build_clobber.
+
2018-04-27 Jakub Jelinek <jakub@redhat.com>
PR c++/85553
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 03bc041..07f3a61 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -14874,8 +14874,7 @@ build_clobber_this ()
if (!vbases)
ctype = CLASSTYPE_AS_BASE (ctype);
- tree clobber = build_constructor (ctype, NULL);
- TREE_THIS_VOLATILE (clobber) = true;
+ tree clobber = build_clobber (ctype);
tree thisref = current_class_ref;
if (ctype != current_class_type)
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index c32869b4..b5b80ab 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1379,9 +1379,8 @@ gimplify_bind_expr (tree *expr_p, gimple_seq *pre_p)
&& !is_gimple_reg (t)
&& flag_stack_reuse != SR_NONE)
{
- tree clobber = build_constructor (TREE_TYPE (t), NULL);
+ tree clobber = build_clobber (TREE_TYPE (t));
gimple *clobber_stmt;
- TREE_THIS_VOLATILE (clobber) = 1;
clobber_stmt = gimple_build_assign (t, clobber);
gimple_set_location (clobber_stmt, end_locus);
gimplify_seq_add_stmt (&cleanup, clobber_stmt);
@@ -6603,9 +6602,7 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
{
if (flag_stack_reuse == SR_ALL)
{
- tree clobber = build_constructor (TREE_TYPE (temp),
- NULL);
- TREE_THIS_VOLATILE (clobber) = true;
+ tree clobber = build_clobber (TREE_TYPE (temp));
clobber = build2 (MODIFY_EXPR, TREE_TYPE (temp), temp, clobber);
gimple_push_cleanup (temp, clobber, false, pre_p, true);
}
diff --git a/gcc/tree.c b/gcc/tree.c
index e93f24d..b661d3d 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2059,6 +2059,16 @@ build_constructor_va (tree type, int nelts, ...)
return build_constructor (type, v);
}
+/* Return a node of type TYPE for which TREE_CLOBBER_P is true. */
+
+tree
+build_clobber (tree type)
+{
+ tree clobber = build_constructor (type, NULL);
+ TREE_THIS_VOLATILE (clobber) = true;
+ return clobber;
+}
+
/* Return a new FIXED_CST node whose type is TYPE and value is F. */
tree
diff --git a/gcc/tree.h b/gcc/tree.h
index 1e14d9f..74a0d18 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4173,6 +4173,7 @@ extern tree build_constructor (tree, vec<constructor_elt, va_gc> *);
extern tree build_constructor_single (tree, tree, tree);
extern tree build_constructor_from_list (tree, tree);
extern tree build_constructor_va (tree, int, ...);
+extern tree build_clobber (tree);
extern tree build_real_from_int_cst (tree, const_tree);
extern tree build_complex (tree, tree, tree);
extern tree build_complex_inf (tree, bool);