From 4a5f467bb47e0b5a85a666d3d9b54ca88821b720 Mon Sep 17 00:00:00 2001 From: Zahira Ammarguellat Date: Tue, 2 Dec 2025 05:14:07 -0800 Subject: [PATCH 1/2] Fix potential SA issues --- .../clang-tidy/ExpandModularHeadersPPCallbacks.h | 2 +- .../clang-tidy/bugprone/FloatLoopCounterCheck.cpp | 1 + .../ProBoundsAvoidUncheckedContainerAccessCheck.cpp | 6 ++++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h b/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h index 95216368492ca..d72d021f44838 100644 --- a/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h +++ b/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.h @@ -137,7 +137,7 @@ class ExpandModularHeadersPPCallbacks : public PPCallbacks { std::unique_ptr PP; bool EnteredMainFile = false; bool StartedLexing = false; - Token CurrentToken; + Token CurrentToken = Token(); }; } // namespace tooling diff --git a/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp index adf2d2b4bcc07..161c31ffe5171 100644 --- a/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp @@ -31,6 +31,7 @@ void FloatLoopCounterCheck::registerMatchers(MatchFinder *Finder) { void FloatLoopCounterCheck::check(const MatchFinder::MatchResult &Result) { const auto *FS = Result.Nodes.getNodeAs("for"); + if (!FS) return; // Check if FS is null and exit if it is. diag(FS->getInc()->getBeginLoc(), "loop induction expression should not have " "floating-point type") diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp index 83803a3e81937..484ee5219b46f 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp @@ -179,6 +179,12 @@ void ProBoundsAvoidUncheckedContainerAccessCheck::check( // Case: a.operator[](i) or a->operator[](i) const auto *Callee = dyn_cast(MCE->getCallee()); + if (!Callee) { + diag(MatchedExpr->getCallee()->getBeginLoc(), "invalid member expression") + << MatchedExpr->getCallee()->getSourceRange(); + return; + } + if (FixMode == At) { // Cases: a.operator[](i) => a.at(i) and a->operator[](i) => a->at(i) From 0fe5a2c5039a101fce68bb3a0b893ebf4dfea2ca Mon Sep 17 00:00:00 2001 From: Zahira Ammarguellat Date: Tue, 2 Dec 2025 06:07:36 -0800 Subject: [PATCH 2/2] Addressed review comments --- .../clang-tidy/bugprone/FloatLoopCounterCheck.cpp | 2 +- .../ProBoundsAvoidUncheckedContainerAccessCheck.cpp | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp index 161c31ffe5171..38a0234337756 100644 --- a/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/FloatLoopCounterCheck.cpp @@ -31,7 +31,7 @@ void FloatLoopCounterCheck::registerMatchers(MatchFinder *Finder) { void FloatLoopCounterCheck::check(const MatchFinder::MatchResult &Result) { const auto *FS = Result.Nodes.getNodeAs("for"); - if (!FS) return; // Check if FS is null and exit if it is. + assert(FS && "FS should not be null"); diag(FS->getInc()->getBeginLoc(), "loop induction expression should not have " "floating-point type") diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp index 484ee5219b46f..67ce8e5cf176c 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsAvoidUncheckedContainerAccessCheck.cpp @@ -177,13 +177,7 @@ void ProBoundsAvoidUncheckedContainerAccessCheck::check( } } else if (const auto *MCE = dyn_cast(MatchedExpr)) { // Case: a.operator[](i) or a->operator[](i) - const auto *Callee = dyn_cast(MCE->getCallee()); - - if (!Callee) { - diag(MatchedExpr->getCallee()->getBeginLoc(), "invalid member expression") - << MatchedExpr->getCallee()->getSourceRange(); - return; - } + const auto *Callee = cast(MCE->getCallee()); if (FixMode == At) { // Cases: a.operator[](i) => a.at(i) and a->operator[](i) => a->at(i)