diff options
author | David Malcolm <dmalcolm@redhat.com> | 2023-06-02 09:28:30 -0400 |
---|---|---|
committer | David Malcolm <dmalcolm@redhat.com> | 2023-06-02 09:28:30 -0400 |
commit | b8a916726e7f4b8871ac9dd75b66d26d1adf4798 (patch) | |
tree | 9ccd92234aa7a0516c07fdd23f26117db5bc11a5 /gcc | |
parent | 23f352972faabe94606687558a66135f9a9e17fb (diff) | |
download | gcc-b8a916726e7f4b8871ac9dd75b66d26d1adf4798.zip gcc-b8a916726e7f4b8871ac9dd75b66d26d1adf4798.tar.gz gcc-b8a916726e7f4b8871ac9dd75b66d26d1adf4798.tar.bz2 |
analyzer: regions in different memory spaces can't alias
gcc/analyzer/ChangeLog:
* store.cc (store::eval_alias_1): Regions in different memory
spaces can't alias.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/analyzer/store.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc index e8c927b..4d1de82 100644 --- a/gcc/analyzer/store.cc +++ b/gcc/analyzer/store.cc @@ -2710,6 +2710,18 @@ tristate store::eval_alias_1 (const region *base_reg_a, const region *base_reg_b) const { + /* If they're in different memory spaces, they can't alias. */ + { + enum memory_space memspace_a = base_reg_a->get_memory_space (); + if (memspace_a != MEMSPACE_UNKNOWN) + { + enum memory_space memspace_b = base_reg_b->get_memory_space (); + if (memspace_b != MEMSPACE_UNKNOWN + && memspace_a != memspace_b) + return tristate::TS_FALSE; + } + } + if (const symbolic_region *sym_reg_a = base_reg_a->dyn_cast_symbolic_region ()) { |