diff options
author | Richard Biener <rguenther@suse.de> | 2019-06-26 11:16:56 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-06-26 11:16:56 +0000 |
commit | baf8d2ecd702d4b2cd18e9549771db994c22ae15 (patch) | |
tree | da34906307ed2aa7c59dc8a0fc1d0c951b396699 | |
parent | 6ab601efaa82b47e0ea1d3c4b14e052b07c79280 (diff) | |
download | gcc-baf8d2ecd702d4b2cd18e9549771db994c22ae15.zip gcc-baf8d2ecd702d4b2cd18e9549771db994c22ae15.tar.gz gcc-baf8d2ecd702d4b2cd18e9549771db994c22ae15.tar.bz2 |
re PR middle-end/90982 (ICE in make_decl_rtl, at varasm.c:1344)
2019-06-26 Richard Biener <rguenther@suse.de>
PR ipa/90982
* tree-inline.c (remap_ssa_name): Copy SSA range info.
* g++.dg/torture/pr90982.C: New testcase.
From-SVN: r272688
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr90982.C | 23 | ||||
-rw-r--r-- | gcc/tree-inline.c | 10 |
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3f4576f..432020f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2019-06-26 Richard Biener <rguenther@suse.de> + PR ipa/90982 + * tree-inline.c (remap_ssa_name): Copy SSA range info. + +2019-06-26 Richard Biener <rguenther@suse.de> + * lto-streamer.h (lto_bitmap_alloc): Remove. (lto_bitmap_free): Likewise. * lto-streamer.c (lto_bitmap_alloc): Remove. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4fbc331..b16e23a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-06-26 Richard Biener <rguenther@suse.de> + + PR ipa/90982 + * g++.dg/torture/pr90982.C: New testcase. + 2019-06-26 Paolo Carlini <paolo.carlini@oracle.com> PR c++/67184 diff --git a/gcc/testsuite/g++.dg/torture/pr90982.C b/gcc/testsuite/g++.dg/torture/pr90982.C new file mode 100644 index 0000000..8edbb7c --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr90982.C @@ -0,0 +1,23 @@ +// { dg-do compile } + +template <int n> struct S +{ + long c[n]; + void f (S d) + { + for (int i = 2;; i++) + c[i] &= d.c[i]; + } +}; + +template <int m> struct T:S<m/64> +{ + void operator &= (T d) + { this -> f (d); } +}; + +void g (T<192> &d) +{ + T<192> v; + d &= v; +} diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 2de5e22..48619fb 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -259,6 +259,11 @@ remap_ssa_name (tree name, copy_body_data *id) struct ptr_info_def *new_pi = get_ptr_info (new_tree); new_pi->pt = pi->pt; } + /* So can range-info. */ + if (!POINTER_TYPE_P (TREE_TYPE (name)) + && SSA_NAME_RANGE_INFO (name)) + duplicate_ssa_name_range_info (new_tree, SSA_NAME_RANGE_TYPE (name), + SSA_NAME_RANGE_INFO (name)); return new_tree; } @@ -292,6 +297,11 @@ remap_ssa_name (tree name, copy_body_data *id) struct ptr_info_def *new_pi = get_ptr_info (new_tree); new_pi->pt = pi->pt; } + /* So can range-info. */ + if (!POINTER_TYPE_P (TREE_TYPE (name)) + && SSA_NAME_RANGE_INFO (name)) + duplicate_ssa_name_range_info (new_tree, SSA_NAME_RANGE_TYPE (name), + SSA_NAME_RANGE_INFO (name)); if (SSA_NAME_IS_DEFAULT_DEF (name)) { /* By inlining function having uninitialized variable, we might |