diff options
author | Jordan Rose <jordan_rose@apple.com> | 2012-11-10 01:40:08 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2012-11-10 01:40:08 +0000 |
commit | 4e674f77150b52d8e6ae82faf64fbdac79d675d3 (patch) | |
tree | a554505252a1221d9da68ce5b65a86ce454e3b2e /lib/Sema/AnalysisBasedWarnings.cpp | |
parent | 3d512d8a75d4cb4609398ce3c2a3ba4c01a23513 (diff) |
[analyzer] When invalidating symbolic offset regions, take fields into account.
Previously, RegionStore was being VERY conservative in saying that because
p[i].x and p[i].y have a concrete base region of 'p', they might overlap.
Now, we check the chain of fields back up to the base object and check if
they match.
This only kicks in when dealing with symbolic offset regions because
RegionStore's "base+offset" representation of concrete offset regions loses
all information about fields. In cases where all offsets are concrete
(s.x and s.y), RegionStore will already do the right thing, but mixing
concrete and symbolic offsets can cause bindings to be invalidated that
are known to not overlap (e.g. p[0].x and p[i].y).
This additional refinement is tracked by <rdar://problem/12676180>.
<rdar://problem/12530149>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167654 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/AnalysisBasedWarnings.cpp')
0 files changed, 0 insertions, 0 deletions