tree.c (build_clobber): New.
authorJason Merrill <jason@redhat.com>
Mon, 30 Apr 2018 15:20:46 +0000 (11:20 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 30 Apr 2018 15:20:46 +0000 (11:20 -0400)
* tree.c (build_clobber): New.

* tree.h: Declare it.
* gimplify.c (gimplify_bind_expr, gimplify_target_expr): Use it.

From-SVN: r259770

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/gimplify.c
gcc/tree.c
gcc/tree.h

index 74ac8b4..eccb89a 100644 (file)
@@ -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
index 6253c9b..7e32e75 100644 (file)
@@ -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
index 03bc041..07f3a61 100644 (file)
@@ -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)
index c32869b..b5b80ab 100644 (file)
@@ -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);
            }
index e93f24d..b661d3d 100644 (file)
@@ -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
index 1e14d9f..74a0d18 100644 (file)
@@ -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);