llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-analysis Author: Yitzhak Mandelbaum (ymand) <details> <summary>Changes</summary> Makes value equivalence require that the values have no properties, except in the case of equivalence by pointer equality (if the pointers are equal, nothing else is checked). Fixes issue #<!-- -->76459. --- Full diff: https://github.com/llvm/llvm-project/pull/76746.diff 2 Files Affected: - (modified) clang/lib/Analysis/FlowSensitive/Value.cpp (+7-3) - (modified) clang/unittests/Analysis/FlowSensitive/ValueTest.cpp (+2-2) ``````````diff diff --git a/clang/lib/Analysis/FlowSensitive/Value.cpp b/clang/lib/Analysis/FlowSensitive/Value.cpp index 349f873f1e6c4d..50475ef5553036 100644 --- a/clang/lib/Analysis/FlowSensitive/Value.cpp +++ b/clang/lib/Analysis/FlowSensitive/Value.cpp @@ -27,9 +27,13 @@ static bool areEquivalentIndirectionValues(const Value &Val1, } bool areEquivalentValues(const Value &Val1, const Value &Val2) { - return &Val1 == &Val2 || (Val1.getKind() == Val2.getKind() && - (isa<TopBoolValue>(&Val1) || - areEquivalentIndirectionValues(Val1, Val2))); + // If values are distinct and have properties, we don't consider them equal, + // leaving equality up to the user model. + return &Val1 == &Val2 || + (Val1.getKind() == Val2.getKind() && + // (Val1.properties().empty() && Val2.properties().empty()) && + (isa<TopBoolValue>(&Val1) || + areEquivalentIndirectionValues(Val1, Val2))); } raw_ostream &operator<<(raw_ostream &OS, const Value &Val) { diff --git a/clang/unittests/Analysis/FlowSensitive/ValueTest.cpp b/clang/unittests/Analysis/FlowSensitive/ValueTest.cpp index c5d18ba74c3ed6..2060b7eb264f74 100644 --- a/clang/unittests/Analysis/FlowSensitive/ValueTest.cpp +++ b/clang/unittests/Analysis/FlowSensitive/ValueTest.cpp @@ -53,8 +53,8 @@ TEST(ValueTest, EquivalentValuesWithDifferentPropsEquivalent) { TopBoolValue V2(A.makeAtomRef(Atom(3))); V1.setProperty("foo", Prop1); V2.setProperty("bar", Prop2); - EXPECT_TRUE(areEquivalentValues(V1, V2)); - EXPECT_TRUE(areEquivalentValues(V2, V1)); + EXPECT_FALSE(areEquivalentValues(V1, V2)); + EXPECT_FALSE(areEquivalentValues(V2, V1)); } TEST(ValueTest, DifferentKindsNotEquivalent) { `````````` </details> https://github.com/llvm/llvm-project/pull/76746 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits