summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core/CallEvent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/CallEvent.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Core/CallEvent.cpp22
1 files changed, 5 insertions, 17 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/CallEvent.cpp b/clang/lib/StaticAnalyzer/Core/CallEvent.cpp
index 8dc6646e0eb..11dda7c3acb 100644
--- a/clang/lib/StaticAnalyzer/Core/CallEvent.cpp
+++ b/clang/lib/StaticAnalyzer/Core/CallEvent.cpp
@@ -303,23 +303,11 @@ ProgramStateRef CallEvent::invalidateRegions(unsigned BlockCount,
for (unsigned Idx = 0, Count = getNumArgs(); Idx != Count; ++Idx) {
// Mark this region for invalidation. We batch invalidate regions
// below for efficiency.
- if (const MemRegion *MR = getArgSVal(Idx).getAsRegion()) {
- bool UseBaseRegion = true;
- if (const auto *FR = MR->getAs<FieldRegion>()) {
- if (const auto *TVR = FR->getSuperRegion()->getAs<TypedValueRegion>()) {
- if (!TVR->getValueType()->isUnionType()) {
- ETraits.setTrait(MR, RegionAndSymbolInvalidationTraits::
- TK_DoNotInvalidateSuperRegion);
- UseBaseRegion = false;
- }
- }
- }
- // todo: factor this out + handle the lower level const pointers.
- if (PreserveArgs.count(Idx))
- ETraits.setTrait(
- UseBaseRegion ? MR->getBaseRegion() : MR,
- RegionAndSymbolInvalidationTraits::TK_PreserveContents);
- }
+ if (PreserveArgs.count(Idx))
+ if (const MemRegion *MR = getArgSVal(Idx).getAsRegion())
+ ETraits.setTrait(MR->getBaseRegion(),
+ RegionAndSymbolInvalidationTraits::TK_PreserveContents);
+ // TODO: Factor this out + handle the lower level const pointers.
ValuesToInvalidate.push_back(getArgSVal(Idx));
OpenPOWER on IntegriCloud