forked from OSchip/llvm-project
[analyzer] LazyCompoundVals should be always bound as default bindings
`LazyCompoundVals` should only appear as `default` bindings in the store. This fixes the second case in this patch-stack. Depends on: D132142 Reviewed By: xazax.hun Differential Revision: https://reviews.llvm.org/D132143
This commit is contained in:
parent
f8643a9b31
commit
afcd862b2e
|
@ -2400,7 +2400,11 @@ RegionStoreManager::bind(RegionBindingsConstRef B, Loc L, SVal V) {
|
|||
|
||||
// Clear out bindings that may overlap with this binding.
|
||||
RegionBindingsRef NewB = removeSubRegionBindings(B, cast<SubRegion>(R));
|
||||
return NewB.addBinding(BindingKey::Make(R, BindingKey::Direct), V);
|
||||
|
||||
// LazyCompoundVals should be always bound as 'default' bindings.
|
||||
auto KeyKind = isa<nonloc::LazyCompoundVal>(V) ? BindingKey::Default
|
||||
: BindingKey::Direct;
|
||||
return NewB.addBinding(BindingKey::Make(R, KeyKind), V);
|
||||
}
|
||||
|
||||
RegionBindingsRef
|
||||
|
|
|
@ -27,10 +27,10 @@ void copy_on_heap(Node* n1) {
|
|||
clang_analyzer_dump(n2); // expected-warning-re {{&HeapSymRegion{conj_${{[0-9]+}}{Node *, LC{{[0-9]+}}, S{{[0-9]+}}, #{{[0-9]+}}}}}}
|
||||
|
||||
clang_analyzer_dump(n1->ptr); // expected-warning-re {{&SymRegion{reg_${{[0-9]+}}<int * Element{SymRegion{reg_${{[0-9]+}}<Node * n1>},0 S64b,struct Node}.ptr>}}}
|
||||
clang_analyzer_dump(n2->ptr); // expected-warning {{Unknown}} FIXME: This should be the same as above.
|
||||
clang_analyzer_dump(n2->ptr); // expected-warning-re {{&SymRegion{reg_${{[0-9]+}}<int * Element{SymRegion{reg_${{[0-9]+}}<Node * n1>},0 S64b,struct Node}.ptr>}}}
|
||||
|
||||
if (n1->ptr != n2->ptr)
|
||||
clang_analyzer_warnIfReached(); // expected-warning {{REACHABLE}} FIXME: This should not be reachable.
|
||||
clang_analyzer_warnIfReached(); // unreachable
|
||||
(void)(n1->ptr);
|
||||
(void)(n2->ptr);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue