From 4526ec20f17a6182f754da9460d9d944dd123cc0 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 12 Nov 2021 16:34:03 +0100 Subject: [PATCH] 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. --- gcc/ipa-modref.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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, -- 2.7.4