================ @@ -173,7 +222,80 @@ void UseStartsEndsWithCheck::registerMatchers(MatchFinder *Finder) { this); } +void UseStartsEndsWithCheck::handleSubstrMatch(const MatchFinder::MatchResult &Result) { + const auto *SubstrCall = Result.Nodes.getNodeAs<CXXMemberCallExpr>("substr_fun"); + const auto *PositiveComparison = Result.Nodes.getNodeAs<Expr>("positiveComparison"); + const auto *NegativeComparison = Result.Nodes.getNodeAs<Expr>("negativeComparison"); + + if (!SubstrCall || (!PositiveComparison && !NegativeComparison)) + return; + + bool Negated = NegativeComparison != nullptr; + const auto *Comparison = Negated ? NegativeComparison : PositiveComparison; + + if (SubstrCall->getBeginLoc().isMacroID()) + return; + + const auto *Str = Result.Nodes.getNodeAs<Expr>("str"); + const auto *Literal = Result.Nodes.getNodeAs<StringLiteral>("literal"); + const auto *Length = Result.Nodes.getNodeAs<Expr>("length"); + + if (!Str || !Literal || !Length) + return; + + // Check if Length is an integer literal and compare with string length + if (const auto *LengthInt = dyn_cast<IntegerLiteral>(Length)) { + unsigned LitLength = Literal->getLength(); + unsigned SubstrLength = LengthInt->getValue().getZExtValue(); ---------------- EugeneZelenko wrote:
```suggestion const unsigned SubstrLength = LengthInt->getValue().getZExtValue(); ``` https://github.com/llvm/llvm-project/pull/116033 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits