diff options
author | Jan Hubicka <jh@suse.cz> | 2021-11-12 16:34:03 +0100 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2021-11-12 16:35:01 +0100 |
commit | 4526ec20f17a6182f754da9460d9d944dd123cc0 (patch) | |
tree | 47ea0b37c13e3e02153be19f6e7f56fc9f9d3cb9 /gcc/ipa-modref.c | |
parent | f49c7a4fb23d82c89c97acec88770b300c903d9a (diff) | |
download | gcc-4526ec20f17a6182f754da9460d9d944dd123cc0.zip gcc-4526ec20f17a6182f754da9460d9d944dd123cc0.tar.gz gcc-4526ec20f17a6182f754da9460d9d944dd123cc0.tar.bz2 |
Fix ICE in tree-ssa-structalias.c
PR tree-optimization/103175
* ipa-modref.c (modref_lattice::merge): Add sanity check.
(callee_to_caller_flags): Make flags adjustment sane.
(modref_eaf_analysis::analyze_ssa_name): Likewise.
Diffstat (limited to 'gcc/ipa-modref.c')
-rw-r--r-- | gcc/ipa-modref.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ipa-modref.c b/gcc/ipa-modref.c index 44b3427..e999c2c 100644 --- a/gcc/ipa-modref.c +++ b/gcc/ipa-modref.c @@ -1681,6 +1681,13 @@ modref_lattice::merge (int f) { if (f & EAF_UNUSED) return false; + /* Check that flags seems sane: if function does not read the parameter + it can not access it indirectly. */ + gcc_checking_assert (!(f & EAF_NO_DIRECT_READ) + || ((f & EAF_NO_INDIRECT_READ) + && (f & EAF_NO_INDIRECT_CLOBBER) + && (f & EAF_NO_INDIRECT_ESCAPE) + && (f & EAF_NOT_RETURNED_INDIRECTLY))); if ((flags & f) != flags) { flags &= f; @@ -1889,9 +1896,11 @@ callee_to_caller_flags (int call_flags, bool ignore_stores, if (!(call_flags & EAF_NO_DIRECT_ESCAPE)) lattice.merge (~(EAF_NOT_RETURNED_DIRECTLY | EAF_NOT_RETURNED_INDIRECTLY + | EAF_NO_DIRECT_READ | EAF_UNUSED)); if (!(call_flags & EAF_NO_INDIRECT_ESCAPE)) lattice.merge (~(EAF_NOT_RETURNED_INDIRECTLY + | EAF_NO_DIRECT_READ | EAF_UNUSED)); } else @@ -2033,11 +2042,11 @@ modref_eaf_analysis::analyze_ssa_name (tree name) if (!(call_flags & (EAF_NOT_RETURNED_DIRECTLY | EAF_UNUSED))) m_lattice[index].merge (~(EAF_NO_DIRECT_ESCAPE - | EAF_NO_INDIRECT_ESCAPE | EAF_UNUSED)); if (!(call_flags & (EAF_NOT_RETURNED_INDIRECTLY | EAF_UNUSED))) m_lattice[index].merge (~(EAF_NO_INDIRECT_ESCAPE + | EAF_NO_DIRECT_READ | EAF_UNUSED)); call_flags = callee_to_caller_flags (call_flags, false, |