diff options
author | Jan Hubicka <jh@suse.cz> | 2019-07-02 10:26:16 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2019-07-02 08:26:16 +0000 |
commit | f51b4aed271f256f029ed4447141a7d1e8017a8c (patch) | |
tree | 11df4e794059123b748f4922525b9f1447fd59b7 /gcc/tree-inline.c | |
parent | 8bb9a5e66a150b73c97aeffee52b57147022a817 (diff) | |
download | gcc-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.c | 12 |
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)) { |