Author: mitchell
Date: 2026-01-24T22:04:33+08:00
New Revision: 6324f576861eaa9a0689c676d739b13325baa20a

URL: 
https://github.com/llvm/llvm-project/commit/6324f576861eaa9a0689c676d739b13325baa20a
DIFF: 
https://github.com/llvm/llvm-project/commit/6324f576861eaa9a0689c676d739b13325baa20a.diff

LOG: [clang-tidy][NFC] Fix `bugprone-unchecked-optional-access` warnings in 
codebase (#170004)

Closes [#156151](https://github.com/llvm/llvm-project/issues/156151)
Assisted-by: Gemini 3 via Gemini CLI

Added: 
    

Modified: 
    clang-tools-extra/clang-tidy/.clang-tidy
    clang-tools-extra/clang-tidy/ClangTidy.cpp
    clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
    clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp
    clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
    clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
    clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp
    clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-tidy/.clang-tidy 
b/clang-tools-extra/clang-tidy/.clang-tidy
index 94df1d8f5c38f..41082695da090 100644
--- a/clang-tools-extra/clang-tidy/.clang-tidy
+++ b/clang-tools-extra/clang-tidy/.clang-tidy
@@ -7,7 +7,6 @@ Checks: >
   -bugprone-branch-clone,
   -bugprone-easily-swappable-parameters,
   -bugprone-narrowing-conversions,
-  -bugprone-unchecked-optional-access,
   -bugprone-unused-return-value,
   cppcoreguidelines-init-variables,
   cppcoreguidelines-missing-std-forward,

diff  --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp 
b/clang-tools-extra/clang-tidy/ClangTidy.cpp
index c6498521be2d9..9f5d21001ec89 100644
--- a/clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -211,7 +211,8 @@ class ErrorReporter {
         }
         const StringRef Code = Buffer.get()->getBuffer();
         auto Style = format::getStyle(
-            *Context.getOptionsForFile(File).FormatStyle, File, "none");
+            Context.getOptionsForFile(File).FormatStyle.value_or("none"), File,
+            "none");
         if (!Style) {
           llvm::errs() << llvm::toString(Style.takeError()) << "\n";
           continue;

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
index 7d6827f0af653..337d660b1f93b 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
@@ -239,13 +239,19 @@ static bool 
parseFileExtensions(llvm::ArrayRef<std::string> AllFileExtensions,
 void ClangTidyContext::setCurrentFile(StringRef File) {
   CurrentFile = std::string(File);
   CurrentOptions = getOptionsForFile(CurrentFile);
-  CheckFilter = std::make_unique<CachedGlobList>(*getOptions().Checks);
-  WarningAsErrorFilter =
-      std::make_unique<CachedGlobList>(*getOptions().WarningsAsErrors);
-  if (!parseFileExtensions(*getOptions().HeaderFileExtensions,
+  CheckFilter = std::make_unique<CachedGlobList>(
+      StringRef(getOptions().Checks.value_or("")));
+  WarningAsErrorFilter = std::make_unique<CachedGlobList>(
+      StringRef(getOptions().WarningsAsErrors.value_or("")));
+  static const std::vector<std::string> EmptyFileExtensions;
+  if (!parseFileExtensions(getOptions().HeaderFileExtensions
+                               ? *getOptions().HeaderFileExtensions
+                               : EmptyFileExtensions,
                            HeaderFileExtensions))
     this->configurationDiag("Invalid header file extensions");
-  if (!parseFileExtensions(*getOptions().ImplementationFileExtensions,
+  if (!parseFileExtensions(getOptions().ImplementationFileExtensions
+                               ? *getOptions().ImplementationFileExtensions
+                               : EmptyFileExtensions,
                            ImplementationFileExtensions))
     this->configurationDiag("Invalid implementation file extensions");
 }
@@ -569,7 +575,7 @@ void 
ClangTidyDiagnosticConsumer::checkFilters(SourceLocation Location,
     return;
   }
 
-  if (!*Context.getOptions().SystemHeaders &&
+  if (!Context.getOptions().SystemHeaders.value_or(false) &&
       (Sources.isInSystemHeader(Location) || 
Sources.isInSystemMacro(Location)))
     return;
 
@@ -600,15 +606,15 @@ void 
ClangTidyDiagnosticConsumer::checkFilters(SourceLocation Location,
 
 llvm::Regex *ClangTidyDiagnosticConsumer::getHeaderFilter() {
   if (!HeaderFilter)
-    HeaderFilter =
-        std::make_unique<llvm::Regex>(*Context.getOptions().HeaderFilterRegex);
+    HeaderFilter = std::make_unique<llvm::Regex>(
+        Context.getOptions().HeaderFilterRegex.value_or(""));
   return HeaderFilter.get();
 }
 
 llvm::Regex *ClangTidyDiagnosticConsumer::getExcludeHeaderFilter() {
   if (!ExcludeHeaderFilter)
     ExcludeHeaderFilter = std::make_unique<llvm::Regex>(
-        *Context.getOptions().ExcludeHeaderFilterRegex);
+        Context.getOptions().ExcludeHeaderFilterRegex.value_or(""));
   return ExcludeHeaderFilter.get();
 }
 

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp
index 6fee154be448c..68b8ae0797acc 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp
@@ -44,6 +44,7 @@ void 
ClangTidyProfiling::printUserFriendlyTable(llvm::raw_ostream &OS,
 
 void ClangTidyProfiling::printAsJSON(llvm::raw_ostream &OS,
                                      llvm::TimerGroup &TG) {
+  assert(Storage && "We should have a filename.");
   OS << "{\n";
   OS << R"("file": ")" << Storage->SourceFilename << "\",\n";
   OS << R"("timestamp": ")" << Storage->Timestamp << "\",\n";
@@ -56,7 +57,6 @@ void ClangTidyProfiling::printAsJSON(llvm::raw_ostream &OS,
 
 void ClangTidyProfiling::storeProfileData(llvm::TimerGroup &TG) {
   assert(Storage && "We should have a filename.");
-
   llvm::SmallString<256> OutputDirectory(Storage->StoreFilename);
   llvm::sys::path::remove_filename(OutputDirectory);
   if (const std::error_code EC =

diff  --git 
a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp 
b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
index c5cf62a78441f..7774c34927ce1 100644
--- a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
@@ -1184,6 +1184,8 @@ class UserDefinedConversionSelector {
     }
 
     if (HowManyGoodConversions == 1) {
+      assert(BestConversion &&
+             "BestConversion must be set if HowManyGoodConversions is 1");
       LLVM_DEBUG(llvm::dbgs()
                  << "--- selectUserDefinedConv. Unique result. Flags: "
                  << formatMixFlags(BestConversion->Flags) << '\n');

diff  --git 
a/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp 
b/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
index 705b8e41f9ab7..e0d4aa382d961 100644
--- a/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/RedundantBranchConditionCheck.cpp
@@ -135,15 +135,15 @@ void RedundantBranchConditionCheck::check(
     if (OtherSide && OtherSide->HasSideEffects(*Result.Context)) {
       const SourceLocation BeforeOtherSide =
           OtherSide->getBeginLoc().getLocWithOffset(-1);
-      const SourceLocation AfterOtherSide =
-          utils::lexer::findNextTokenSkippingComments(
-              OtherSide->getEndLoc(), *Result.SourceManager, getLangOpts())
-              ->getLocation();
-      Diag << FixItHint::CreateRemoval(
-                  CharSourceRange::getTokenRange(IfBegin, BeforeOtherSide))
-           << FixItHint::CreateInsertion(AfterOtherSide, ";")
-           << FixItHint::CreateRemoval(
-                  CharSourceRange::getTokenRange(AfterOtherSide, IfEnd));
+      if (const auto NextToken = utils::lexer::findNextTokenSkippingComments(
+              OtherSide->getEndLoc(), *Result.SourceManager, getLangOpts())) {
+        const SourceLocation AfterOtherSide = NextToken->getLocation();
+        Diag << FixItHint::CreateRemoval(
+                    CharSourceRange::getTokenRange(IfBegin, BeforeOtherSide))
+             << FixItHint::CreateInsertion(AfterOtherSide, ";")
+             << FixItHint::CreateRemoval(
+                    CharSourceRange::getTokenRange(AfterOtherSide, IfEnd));
+      }
     } else {
       Diag << FixItHint::CreateRemoval(
           CharSourceRange::getTokenRange(IfBegin, IfEnd));
@@ -167,13 +167,13 @@ void RedundantBranchConditionCheck::check(
       Diag << FixItHint::CreateRemoval(CharSourceRange::getTokenRange(
           CondOp->getLHS()->getBeginLoc(), BeforeRHS));
     } else {
-      const SourceLocation AfterLHS =
-          utils::lexer::findNextTokenSkippingComments(
+      if (const auto NextToken = utils::lexer::findNextTokenSkippingComments(
               CondOp->getLHS()->getEndLoc(), *Result.SourceManager,
-              getLangOpts())
-              ->getLocation();
-      Diag << FixItHint::CreateRemoval(CharSourceRange::getTokenRange(
-          AfterLHS, CondOp->getRHS()->getEndLoc()));
+              getLangOpts())) {
+        const SourceLocation AfterLHS = NextToken->getLocation();
+        Diag << FixItHint::CreateRemoval(CharSourceRange::getTokenRange(
+            AfterLHS, CondOp->getRHS()->getEndLoc()));
+      }
     }
   }
 }

diff  --git a/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp
index 2f0949c231844..c331a74b9b794 100644
--- a/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/FunctionSizeCheck.cpp
@@ -225,10 +225,12 @@ void FunctionSizeCheck::check(const 
MatchFinder::MatchResult &Result) {
         << ActualNumberParameters << ParameterThreshold.value();
   }
 
-  for (const auto &CSPos : FI.NestingThresholders) {
-    diag(CSPos, "nesting level %0 starts here (threshold %1)",
-         DiagnosticIDs::Note)
-        << NestingThreshold.value() + 1 << NestingThreshold.value();
+  if (NestingThreshold) {
+    for (const auto &CSPos : FI.NestingThresholders) {
+      diag(CSPos, "nesting level %0 starts here (threshold %1)",
+           DiagnosticIDs::Note)
+          << *NestingThreshold + 1 << *NestingThreshold;
+    }
   }
 
   if (VariableThreshold && FI.Variables > VariableThreshold) {

diff  --git 
a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index 9cee6ddb93d4d..e8c1e3a610fae 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -436,7 +436,7 @@ bool 
IdentifierNamingCheck::HungarianNotation::isOptionEnabled(
   if (Iter == StrMap.end())
     return false;
 
-  return *llvm::yaml::parseBool(Iter->getValue());
+  return llvm::yaml::parseBool(Iter->getValue()).value_or(false);
 }
 
 void IdentifierNamingCheck::HungarianNotation::loadFileConfig(
@@ -829,26 +829,28 @@ void 
IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
   const ArrayRef<std::optional<NamingStyle>> Styles =
       MainFileStyle->getStyles();
   for (size_t I = 0; I < SK_Count; ++I) {
-    if (!Styles[I])
+    const auto &StyleOpt = Styles[I];
+    if (!StyleOpt)
       continue;
+    const NamingStyle &Style = *StyleOpt;
     const size_t StyleSize = StyleNames[I].size();
     StyleString.assign({StyleNames[I], "HungarianPrefix"});
 
-    Options.store(Opts, StyleString, Styles[I]->HPType);
+    Options.store(Opts, StyleString, Style.HPType);
 
     memcpy(&StyleString[StyleSize], "IgnoredRegexp", 13);
     StyleString.truncate(StyleSize + 13);
-    Options.store(Opts, StyleString, Styles[I]->IgnoredRegexpStr);
+    Options.store(Opts, StyleString, Style.IgnoredRegexpStr);
     memcpy(&StyleString[StyleSize], "Prefix", 6);
     StyleString.truncate(StyleSize + 6);
-    Options.store(Opts, StyleString, Styles[I]->Prefix);
+    Options.store(Opts, StyleString, Style.Prefix);
     // Fast replacement of [Pre]fix -> [Suf]fix.
     memcpy(&StyleString[StyleSize], "Suf", 3);
-    Options.store(Opts, StyleString, Styles[I]->Suffix);
-    if (Styles[I]->Case) {
+    Options.store(Opts, StyleString, Style.Suffix);
+    if (Style.Case) {
       memcpy(&StyleString[StyleSize], "Case", 4);
       StyleString.pop_back_n(2);
-      Options.store(Opts, StyleString, *Styles[I]->Case);
+      Options.store(Opts, StyleString, *Style.Case);
     }
   }
   Options.store(Opts, "GetConfigPerFile", GetConfigPerFile);
@@ -1336,10 +1338,14 @@ IdentifierNamingCheck::getFailureInfo(
     ArrayRef<std::optional<IdentifierNamingCheck::NamingStyle>> NamingStyles,
     const IdentifierNamingCheck::HungarianNotationOption &HNOption,
     StyleKind SK, const SourceManager &SM, bool IgnoreFailedSplit) const {
-  if (SK == SK_Invalid || !NamingStyles[SK])
+  if (SK == SK_Invalid)
     return std::nullopt;
 
-  const IdentifierNamingCheck::NamingStyle &Style = *NamingStyles[SK];
+  const auto &StyleOpt = NamingStyles[SK];
+  if (!StyleOpt)
+    return std::nullopt;
+
+  const IdentifierNamingCheck::NamingStyle &Style = *StyleOpt;
   if (Style.IgnoredRegexp.isValid() && Style.IgnoredRegexp.match(Name))
     return std::nullopt;
 


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to