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
