aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2019-07-02 10:26:16 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2019-07-02 08:26:16 +0000
commitf51b4aed271f256f029ed4447141a7d1e8017a8c (patch)
tree11df4e794059123b748f4922525b9f1447fd59b7 /gcc/tree-inline.c
parent8bb9a5e66a150b73c97aeffee52b57147022a817 (diff)
downloadgcc-f51b4aed271f256f029ed4447141a7d1e8017a8c.zip
gcc-f51b4aed271f256f029ed4447141a7d1e8017a8c.tar.gz
gcc-f51b4aed271f256f029ed4447141a7d1e8017a8c.tar.bz2
tree-inline.c (remap_gimple_stmt): Do not subtitute handled components to clobber of return value.
* tree-inline.c (remap_gimple_stmt): Do not subtitute handled components to clobber of return value. * g++.dg/lto/pr90990_0.C: New testcase. From-SVN: r272925
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 450af46..42e4597 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1757,6 +1757,18 @@ remap_gimple_stmt (gimple *stmt, copy_body_data *id)
return NULL;
}
}
+
+ /* We do not allow CLOBBERs of handled components. In case
+ returned value is stored via such handled component, remove
+ the clobber so stmt verifier is happy. */
+ if (gimple_clobber_p (stmt)
+ && TREE_CODE (gimple_assign_lhs (stmt)) == RESULT_DECL)
+ {
+ tree remapped = remap_decl (gimple_assign_lhs (stmt), id);
+ if (!DECL_P (remapped)
+ && TREE_CODE (remapped) != MEM_REF)
+ return NULL;
+ }
if (gimple_debug_bind_p (stmt))
{