ASDenysPetrov accepted this revision. ASDenysPetrov added a comment. This revision is now accepted and ready to land.
I see the problem. It appears when you meet, say, '>' in a //true// branch and '<=' in a //false// branch which then turns into `>` again and trigger the flag, but shouldn't. Your solution is correct and looks clear. Here I propose you one more to not use additional abstruction in a favor of performance. See inlines. ================ Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:1129 - int UnknownStates = 0; + llvm::SmallSet<BinaryOperatorKind, 2> QueriedToUnknown; ---------------- ================ Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:1166-1167 if (BranchState == OperatorRelationsTable::Unknown) { - if (++UnknownStates == 2) + QueriedToUnknown.insert(QueriedOP); + if (QueriedToUnknown.size() == 2) // If we met both Unknown states. ---------------- ================ Comment at: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:1174-1175 BranchState = CmpOpTable.getCmpOpStateForUnknownX2(CurrentOP); else continue; } ---------------- Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D110910/new/ https://reviews.llvm.org/D110910 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits