aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2021-10-14 15:48:01 +0200
committerJan Hubicka <hubicka@ucw.cz>2021-10-14 15:48:01 +0200
commitfecd145359fc981beb2802f746190227c5cc010a (patch)
tree7cce736513c6c30f5575f25272550c3c33c23452
parent27dea0b42c773a53817960d006160642892fe145 (diff)
downloadgcc-fecd145359fc981beb2802f746190227c5cc010a.zip
gcc-fecd145359fc981beb2802f746190227c5cc010a.tar.gz
gcc-fecd145359fc981beb2802f746190227c5cc010a.tar.bz2
Fix ICE in insert_access.
gcc/ChangeLog: PR ipa/102557 * ipa-modref-tree.h (modref_access_node::update2): Also check that parm_offset is unchanged. (modref_ref_node::insert_access): Fix updating of parameter.
-rw-r--r--gcc/ipa-modref-tree.h16
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/ipa-modref-tree.h b/gcc/ipa-modref-tree.h
index 9795e2b..9976e48 100644
--- a/gcc/ipa-modref-tree.h
+++ b/gcc/ipa-modref-tree.h
@@ -148,7 +148,8 @@ struct GTY(()) modref_access_node
poly_int64 offset1, poly_int64 size1, poly_int64 max_size1,
bool record_adjustments)
{
- if (known_eq (offset, offset1)
+ if (known_eq (parm_offset, parm_offset1)
+ && known_eq (offset, offset1)
&& known_eq (size, size1)
&& known_eq (max_size, max_size1))
return;
@@ -404,13 +405,9 @@ private:
new_max_size = max_size2;
else
{
- max_size2 = max_size2 + offset2 - offset1;
- if (known_le (max_size, max_size2))
- new_max_size = max_size2;
- else if (known_le (max_size2, max_size))
- new_max_size = max_size;
- else
- gcc_unreachable ();
+ new_max_size = max_size2 + offset2 - offset1;
+ if (known_le (new_max_size, max_size1))
+ new_max_size = max_size1;
}
update (parm_offset1, offset1,
@@ -577,6 +574,9 @@ struct GTY((user)) modref_ref_node
}
(*accesses)[best1].forced_merge (best2 < 0 ? a : (*accesses)[best2],
record_adjustments);
+ /* Check that merging indeed merged ranges. */
+ gcc_checking_assert ((*accesses)[best1].contains
+ (best2 < 0 ? a : (*accesses)[best2]));
if (!(*accesses)[best1].useful_p ())
{
collapse ();