steakhal created this revision. steakhal added reviewers: NoQ, xazax.hun, ASDenysPetrov, martong, isuckatcs, vabridgers, Szelethus. Herald added subscribers: manas, dkrupp, donat.nagy, mikhail.ramalho, a.sidorin, rnkovacs, szepet, baloghadamsoftware. Herald added a project: All. steakhal requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
`LazyCompoundVals` should only appear as `default` bindings in the store. This fixes the second case in this patch-stack. Depends on: D132142 <https://reviews.llvm.org/D132142> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D132143 Files: clang/lib/StaticAnalyzer/Core/RegionStore.cpp clang/test/Analysis/trivial-copy-struct.cpp Index: clang/test/Analysis/trivial-copy-struct.cpp =================================================================== --- clang/test/Analysis/trivial-copy-struct.cpp +++ clang/test/Analysis/trivial-copy-struct.cpp @@ -27,10 +27,10 @@ clang_analyzer_dump(n2); // expected-warning {{&HeapSymRegion{conj_$1{Node *, LC1, S1855, #1}}}} clang_analyzer_dump(n1->ptr); // expected-warning {{&SymRegion{reg_$3<int * Element{SymRegion{reg_$2<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 {{&SymRegion{reg_$3<int * Element{SymRegion{reg_$2<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); } Index: clang/lib/StaticAnalyzer/Core/RegionStore.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/RegionStore.cpp +++ clang/lib/StaticAnalyzer/Core/RegionStore.cpp @@ -2400,7 +2400,11 @@ // 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
Index: clang/test/Analysis/trivial-copy-struct.cpp =================================================================== --- clang/test/Analysis/trivial-copy-struct.cpp +++ clang/test/Analysis/trivial-copy-struct.cpp @@ -27,10 +27,10 @@ clang_analyzer_dump(n2); // expected-warning {{&HeapSymRegion{conj_$1{Node *, LC1, S1855, #1}}}} clang_analyzer_dump(n1->ptr); // expected-warning {{&SymRegion{reg_$3<int * Element{SymRegion{reg_$2<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 {{&SymRegion{reg_$3<int * Element{SymRegion{reg_$2<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); } Index: clang/lib/StaticAnalyzer/Core/RegionStore.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/RegionStore.cpp +++ clang/lib/StaticAnalyzer/Core/RegionStore.cpp @@ -2400,7 +2400,11 @@ // 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
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits