aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-07-26 11:02:13 +0200
committerRichard Biener <rguenther@suse.de>2022-07-26 12:08:50 +0200
commit67248ad043b366d30e97cb6c192593057e798805 (patch)
treee2188f8defe1f61110eaff43e9e4ff19a73bf298
parentc906efc700dafe7d30e8b35895f43862ddf7dc8e (diff)
downloadgcc-67248ad043b366d30e97cb6c192593057e798805.zip
gcc-67248ad043b366d30e97cb6c192593057e798805.tar.gz
gcc-67248ad043b366d30e97cb6c192593057e798805.tar.bz2
Improve ptr_derefs_may_alias_p for the case of &STRING_CST
When the first pointer happens to be a pointer to a STRING_CST we give up too early since the 2nd pointer handling could still end up with a DECL for example which can disambiguate against a STRING_CST just fine. * tree-ssa-alias.cc (ptr_derefs_may_alias_p): If ptr1 points to a constant continue checking ptr2.
-rw-r--r--gcc/tree-ssa-alias.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-ssa-alias.cc b/gcc/tree-ssa-alias.cc
index 390cd87..b4c65da 100644
--- a/gcc/tree-ssa-alias.cc
+++ b/gcc/tree-ssa-alias.cc
@@ -349,7 +349,9 @@ ptr_derefs_may_alias_p (tree ptr1, tree ptr2)
else if (base
&& DECL_P (base))
return ptr_deref_may_alias_decl_p (ptr2, base);
- else
+ /* Try ptr2 when ptr1 points to a constant. */
+ else if (base
+ && !CONSTANT_CLASS_P (base))
return true;
}
if (TREE_CODE (ptr2) == ADDR_EXPR)