tree-nested.c (build_simple_mem_ref_notrap): New function.
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 24 Jul 2019 15:29:34 +0000 (15:29 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 24 Jul 2019 15:29:34 +0000 (15:29 +0000)
* tree-nested.c (build_simple_mem_ref_notrap): New function.
(get_static_chain): Call it instead of build_simple_mem_ref.
(get_frame_field): Likewise.
(get_nonlocal_debug_decl): Likewise.
(convert_nonlocal_reference_op): Likewise.

From-SVN: r273763

gcc/ChangeLog
gcc/tree-nested.c

index 5a94c2fdd6ab28b04bf452c58d7fbb2f8d6365ad..694340e3bad711ed6791ccb54e46cf2a4af65ab1 100644 (file)
@@ -1,3 +1,11 @@
+2019-07-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * tree-nested.c (build_simple_mem_ref_notrap): New function.
+       (get_static_chain): Call it instead of build_simple_mem_ref.
+       (get_frame_field): Likewise.
+       (get_nonlocal_debug_decl): Likewise.
+       (convert_nonlocal_reference_op): Likewise.
+
 2019-07-24  Claudiu Zissulescu  <claziss@synopsys.com>
 
        * config/arc/arc-protos.h (arc_output_function_epilogue): Delete
index 1527456e0c572f59733205e97dcc325ba8d2a253..5d189572e19160cb232f658e92cd325e4ae91cca 100644 (file)
@@ -169,6 +169,16 @@ create_tmp_var_for (struct nesting_info *info, tree type, const char *prefix)
   return tmp_var;
 }
 
+/* Like build_simple_mem_ref, but set TREE_THIS_NOTRAP on the result.  */
+
+static tree
+build_simple_mem_ref_notrap (tree ptr)
+{
+  tree t = build_simple_mem_ref (ptr);
+  TREE_THIS_NOTRAP (t) = 1;
+  return t;
+}
+
 /* Take the address of EXP to be used within function CONTEXT.
    Mark it for addressability as necessary.  */
 
@@ -877,7 +887,7 @@ get_static_chain (struct nesting_info *info, tree target_context,
        {
          tree field = get_chain_field (i);
 
-         x = build_simple_mem_ref (x);
+         x = build_simple_mem_ref_notrap (x);
          x = build3 (COMPONENT_REF, TREE_TYPE (field), x, field, NULL_TREE);
          x = init_tmp_var (info, x, gsi);
        }
@@ -914,12 +924,12 @@ get_frame_field (struct nesting_info *info, tree target_context,
        {
          tree field = get_chain_field (i);
 
-         x = build_simple_mem_ref (x);
+         x = build_simple_mem_ref_notrap (x);
          x = build3 (COMPONENT_REF, TREE_TYPE (field), x, field, NULL_TREE);
          x = init_tmp_var (info, x, gsi);
        }
 
-      x = build_simple_mem_ref (x);
+      x = build_simple_mem_ref_notrap (x);
     }
 
   x = build3 (COMPONENT_REF, TREE_TYPE (field), x, field, NULL_TREE);
@@ -963,16 +973,16 @@ get_nonlocal_debug_decl (struct nesting_info *info, tree decl)
       for (i = info->outer; i->context != target_context; i = i->outer)
        {
          field = get_chain_field (i);
-         x = build_simple_mem_ref (x);
+         x = build_simple_mem_ref_notrap (x);
          x = build3 (COMPONENT_REF, TREE_TYPE (field), x, field, NULL_TREE);
        }
-      x = build_simple_mem_ref (x);
+      x = build_simple_mem_ref_notrap (x);
     }
 
   field = lookup_field_for_decl (i, decl, INSERT);
   x = build3 (COMPONENT_REF, TREE_TYPE (field), x, field, NULL_TREE);
   if (use_pointer_in_frame (decl))
-    x = build_simple_mem_ref (x);
+    x = build_simple_mem_ref_notrap (x);
 
   /* ??? We should be remapping types as well, surely.  */
   new_decl = build_decl (DECL_SOURCE_LOCATION (decl),
@@ -1060,7 +1070,7 @@ convert_nonlocal_reference_op (tree *tp, int *walk_subtrees, void *data)
            if (use_pointer_in_frame (t))
              {
                x = init_tmp_var (info, x, &wi->gsi);
-               x = build_simple_mem_ref (x);
+               x = build_simple_mem_ref_notrap (x);
              }
          }