diff options
author | Richard Biener <rguenther@suse.de> | 2022-07-26 11:02:13 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-07-26 12:08:50 +0200 |
commit | 67248ad043b366d30e97cb6c192593057e798805 (patch) | |
tree | e2188f8defe1f61110eaff43e9e4ff19a73bf298 | |
parent | c906efc700dafe7d30e8b35895f43862ddf7dc8e (diff) | |
download | gcc-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.cc | 4 |
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) |