diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2019-07-24 15:29:34 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2019-07-24 15:29:34 +0000 |
commit | 58f3f2c397133235dd7cce69f4a93561005fe391 (patch) | |
tree | 2105650d075f4f5be1401fc51dae729d32c6ab8d /gcc/tree-nested.c | |
parent | ce9dbf20f4e1394121d5d875e502731a9db4f7a1 (diff) | |
download | gcc-58f3f2c397133235dd7cce69f4a93561005fe391.zip gcc-58f3f2c397133235dd7cce69f4a93561005fe391.tar.gz gcc-58f3f2c397133235dd7cce69f4a93561005fe391.tar.bz2 |
tree-nested.c (build_simple_mem_ref_notrap): New function.
* 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
Diffstat (limited to 'gcc/tree-nested.c')
-rw-r--r-- | gcc/tree-nested.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c index 1527456..5d18957 100644 --- a/gcc/tree-nested.c +++ b/gcc/tree-nested.c @@ -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); } } |