diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2021-08-26 15:33:56 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@ucw.cz> | 2021-08-26 15:33:56 +0200 |
commit | f075b8c5adcf9cb6336563c472c8d624c54184db (patch) | |
tree | 079f402801f6af76f644a43c2ccbd0062c69a64d /gcc | |
parent | cd67d138ec6006d650d1ba96c8a1322b285723cd (diff) | |
download | gcc-f075b8c5adcf9cb6336563c472c8d624c54184db.zip gcc-f075b8c5adcf9cb6336563c472c8d624c54184db.tar.gz gcc-f075b8c5adcf9cb6336563c472c8d624c54184db.tar.bz2 |
Fix off-by-one error in try_merge_with
gcc/ChangeLog:
* ipa-modref-tree.h (modref_ref_node::verify): New member
functoin.
(modref_ref_node::insert): Use it.
(modref_ref_node::try_mere_with): Fix off by one error.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ipa-modref-tree.h | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/gcc/ipa-modref-tree.h b/gcc/ipa-modref-tree.h index 6f6932f..4edec4e 100644 --- a/gcc/ipa-modref-tree.h +++ b/gcc/ipa-modref-tree.h @@ -322,6 +322,20 @@ struct GTY((user)) modref_ref_node every_access = true; } + /* Verify that list does not contain redundant accesses. */ + void verify () + { + size_t i, i2; + modref_access_node *a, *a2; + + FOR_EACH_VEC_SAFE_ELT (accesses, i, a) + { + FOR_EACH_VEC_SAFE_ELT (accesses, i2, a2) + if (i != i2) + gcc_assert (!a->contains (*a2)); + } + } + /* Insert access with OFFSET and SIZE. Collapse tree if it has more than MAX_ACCESSES entries. If RECORD_ADJUSTMENTs is true avoid too many interval extensions. @@ -337,6 +351,9 @@ struct GTY((user)) modref_ref_node size_t i; modref_access_node *a2; + if (flag_checking) + verify (); + if (!a.useful_p ()) { if (!every_access) @@ -392,13 +409,15 @@ private: size_t i; FOR_EACH_VEC_SAFE_ELT (accesses, i, a2) - if (i != index) - if ((*accesses)[index].contains (*a2) - || (*accesses)[index].merge (*a2, false)) + if (i != index + && ((*accesses)[index].contains (*a2) + || (*accesses)[index].merge (*a2, false))) { - if (index == accesses->length () - 1) - index = i; accesses->unordered_remove (i); + if (index == accesses->length ()) + index = i; + else + i--; } } }; |