From 34e0d0579a3a6617b9b3212f2bc63d959c8f56c6 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Sat, 3 Dec 2022 11:34:25 -0800 Subject: [PATCH] [Analysis] Use std::nullopt instead of None (NFC) This patch mechanically replaces None with std::nullopt where the compiler would warn if None were deprecated. The intent is to reduce the amount of manual work required in migrating from Optional to std::optional. This is part of an effort to migrate from llvm::Optional to std::optional: https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716 --- .../include/clang/Analysis/Analyses/PostOrderCFGView.h | 7 ++++--- .../include/clang/Analysis/Analyses/ThreadSafetyTIL.h | 4 ++-- clang/include/clang/Analysis/AnyCall.h | 8 ++++---- clang/include/clang/Analysis/CFG.h | 2 +- clang/include/clang/Analysis/ProgramPoint.h | 2 +- clang/lib/Analysis/BodyFarm.cpp | 4 ++-- clang/lib/Analysis/CFG.cpp | 4 ++-- clang/lib/Analysis/CalledOnceCheck.cpp | 10 +++++----- .../Models/UncheckedOptionalAccessModel.cpp | 6 +++--- .../FlowSensitive/TypeErasedDataflowAnalysis.cpp | 2 +- clang/lib/Analysis/MacroExpansionContext.cpp | 8 ++++---- clang/lib/Analysis/PathDiagnostic.cpp | 10 +++++----- clang/lib/Analysis/RetainSummaryManager.cpp | 18 +++++++++--------- clang/lib/Analysis/UninitializedValues.cpp | 2 +- 14 files changed, 44 insertions(+), 43 deletions(-) diff --git a/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h b/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h index 0b306d1..8964481 100644 --- a/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h +++ b/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h @@ -54,11 +54,12 @@ public: // occasionally hand out null pointers for pruned edges, so we catch those // here. if (!Block) - return std::make_pair(None, false); // if an edge is trivially false. + return std::make_pair(std::nullopt, + false); // if an edge is trivially false. if (VisitedBlockIDs.test(Block->getBlockID())) - return std::make_pair(None, false); + return std::make_pair(std::nullopt, false); VisitedBlockIDs.set(Block->getBlockID()); - return std::make_pair(None, true); + return std::make_pair(std::nullopt, true); } /// Check if the bit for a CFGBlock has been already set. diff --git a/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h b/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h index 4859351..385cd02 100644 --- a/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h +++ b/clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h @@ -1464,7 +1464,7 @@ public: static bool classof(const SExpr *E) { return E->opcode() == COP_Return; } /// Return an empty list. - ArrayRef successors() { return None; } + ArrayRef successors() { return std::nullopt; } SExpr *returnValue() { return Retval; } const SExpr *returnValue() const { return Retval; } @@ -1490,7 +1490,7 @@ inline ArrayRef Terminator::successors() { case COP_Branch: return cast(this)->successors(); case COP_Return: return cast(this)->successors(); default: - return None; + return std::nullopt; } } diff --git a/clang/include/clang/Analysis/AnyCall.h b/clang/include/clang/Analysis/AnyCall.h index 6e5e019..876d423 100644 --- a/clang/include/clang/Analysis/AnyCall.h +++ b/clang/include/clang/Analysis/AnyCall.h @@ -123,7 +123,7 @@ public: } else if (const auto *CXCIE = dyn_cast(E)) { return AnyCall(CXCIE); } else { - return None; + return std::nullopt; } } @@ -136,13 +136,13 @@ public: } else if (const auto *MD = dyn_cast(D)) { return AnyCall(MD); } - return None; + return std::nullopt; } /// \returns formal parameters for direct calls (including virtual calls) ArrayRef parameters() const { if (!D) - return None; + return std::nullopt; if (const auto *FD = dyn_cast(D)) { return FD->parameters(); @@ -151,7 +151,7 @@ public: } else if (const auto *BD = dyn_cast(D)) { return BD->parameters(); } else { - return None; + return std::nullopt; } } diff --git a/clang/include/clang/Analysis/CFG.h b/clang/include/clang/Analysis/CFG.h index f3e005b..ecf5906 100644 --- a/clang/include/clang/Analysis/CFG.h +++ b/clang/include/clang/Analysis/CFG.h @@ -108,7 +108,7 @@ public: template Optional getAs() const { if (!T::isKind(*this)) - return None; + return std::nullopt; T t; CFGElement& e = t; e = *this; diff --git a/clang/include/clang/Analysis/ProgramPoint.h b/clang/include/clang/Analysis/ProgramPoint.h index 680713a..81a1288 100644 --- a/clang/include/clang/Analysis/ProgramPoint.h +++ b/clang/include/clang/Analysis/ProgramPoint.h @@ -149,7 +149,7 @@ public: template Optional getAs() const { if (!T::isKind(*this)) - return None; + return std::nullopt; T t; ProgramPoint& PP = t; PP = *this; diff --git a/clang/lib/Analysis/BodyFarm.cpp b/clang/lib/Analysis/BodyFarm.cpp index 38f100a..b242008 100644 --- a/clang/lib/Analysis/BodyFarm.cpp +++ b/clang/lib/Analysis/BodyFarm.cpp @@ -541,7 +541,7 @@ static Stmt *create_dispatch_once(ASTContext &C, const FunctionDecl *D) { CallExpr *CE = CallExpr::Create( /*ASTContext=*/C, /*StmtClass=*/M.makeLvalueToRvalue(/*Expr=*/Block), - /*Args=*/None, + /*Args=*/std::nullopt, /*QualType=*/C.VoidTy, /*ExprValueType=*/VK_PRValue, /*SourceLocation=*/SourceLocation(), FPOptionsOverride()); @@ -609,7 +609,7 @@ static Stmt *create_dispatch_sync(ASTContext &C, const FunctionDecl *D) { ASTMaker M(C); DeclRefExpr *DR = M.makeDeclRefExpr(PV); ImplicitCastExpr *ICE = M.makeLvalueToRvalue(DR, Ty); - CallExpr *CE = CallExpr::Create(C, ICE, None, C.VoidTy, VK_PRValue, + CallExpr *CE = CallExpr::Create(C, ICE, std::nullopt, C.VoidTy, VK_PRValue, SourceLocation(), FPOptionsOverride()); return CE; } diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp index 233af41..c3b774f 100644 --- a/clang/lib/Analysis/CFG.cpp +++ b/clang/lib/Analysis/CFG.cpp @@ -1044,14 +1044,14 @@ private: return llvm::APInt(Context->getTypeSize(Context->IntTy), !Value); default: assert(false && "Unexpected unary operator!"); - return llvm::None; + return std::nullopt; } } } else if (const auto *IntLiteral = dyn_cast(E->IgnoreParens())) return IntLiteral->getValue(); - return llvm::None; + return std::nullopt; } TryResult analyzeLogicOperatorCondition(BinaryOperatorKind Relation, diff --git a/clang/lib/Analysis/CalledOnceCheck.cpp b/clang/lib/Analysis/CalledOnceCheck.cpp index ce760d2..705a736 100644 --- a/clang/lib/Analysis/CalledOnceCheck.cpp +++ b/clang/lib/Analysis/CalledOnceCheck.cpp @@ -513,7 +513,7 @@ public: if (const Stmt *Terminator = Conditional->getTerminatorStmt()) { return NotCalledClarifier{Conditional, SuccWithoutCall}.Visit(Terminator); } - return llvm::None; + return std::nullopt; } llvm::Optional VisitIfStmt(const IfStmt *If) { @@ -563,7 +563,7 @@ public: llvm::Optional VisitBinaryOperator(const BinaryOperator *) { // We don't want to report on short-curcuit logical operations. - return llvm::None; + return std::nullopt; } llvm::Optional VisitStmt(const Stmt *Terminator) { @@ -1008,7 +1008,7 @@ private: return A->getCompletionHandlerIndex().getASTIndex() == ParamIndex; } - return llvm::None; + return std::nullopt; } /// Return true if the specified selector represents init method. @@ -1644,7 +1644,7 @@ private: return getIndex(*Parameter); } - return llvm::None; + return std::nullopt; } llvm::Optional getIndex(const ParmVarDecl &Parameter) const { @@ -1662,7 +1662,7 @@ private: return It - TrackedParams.begin(); } - return llvm::None; + return std::nullopt; } const ParmVarDecl *getParameter(unsigned Index) const { diff --git a/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp b/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp index 1a41cfa..2ae6cd1 100644 --- a/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp +++ b/clang/lib/Analysis/FlowSensitive/Models/UncheckedOptionalAccessModel.cpp @@ -56,7 +56,7 @@ auto hasOptionalType() { return hasType(optionalOrAliasType()); } auto isOptionalMemberCallWithName( llvm::StringRef MemberName, - llvm::Optional Ignorable = llvm::None) { + llvm::Optional Ignorable = std::nullopt) { auto Exception = unless(Ignorable ? expr(anyOf(*Ignorable, cxxThisExpr())) : cxxThisExpr()); return cxxMemberCallExpr( @@ -66,7 +66,7 @@ auto isOptionalMemberCallWithName( auto isOptionalOperatorCallWithName( llvm::StringRef operator_name, - llvm::Optional Ignorable = llvm::None) { + llvm::Optional Ignorable = std::nullopt) { return cxxOperatorCallExpr( hasOverloadedOperatorName(operator_name), callee(cxxMethodDecl(ofClass(optionalClass()))), @@ -540,7 +540,7 @@ ignorableOptional(const UncheckedOptionalAccessModelOptions &Options) { cxxOperatorCallExpr(anyOf(hasOverloadedOperatorName("->"), hasOverloadedOperatorName("*")), unless(hasArgument(0, expr(hasOptionalType()))))))); - return llvm::None; + return std::nullopt; } StatementMatcher diff --git a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp index 04d6de3..8f0df9e 100644 --- a/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp +++ b/clang/lib/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.cpp @@ -414,7 +414,7 @@ runTypeErasedDataflowAnalysis( ForwardDataflowWorklist Worklist(CFCtx.getCFG(), &POV); std::vector> BlockStates( - CFCtx.getCFG().size(), llvm::None); + CFCtx.getCFG().size(), std::nullopt); // The entry basic block doesn't contain statements so it can be skipped. const CFGBlock &Entry = CFCtx.getCFG().getEntry(); diff --git a/clang/lib/Analysis/MacroExpansionContext.cpp b/clang/lib/Analysis/MacroExpansionContext.cpp index 2905106..489cdfc 100644 --- a/clang/lib/Analysis/MacroExpansionContext.cpp +++ b/clang/lib/Analysis/MacroExpansionContext.cpp @@ -99,11 +99,11 @@ void MacroExpansionContext::registerForPreprocessor(Preprocessor &NewPP) { Optional MacroExpansionContext::getExpandedText(SourceLocation MacroExpansionLoc) const { if (MacroExpansionLoc.isMacroID()) - return llvm::None; + return std::nullopt; // If there was no macro expansion at that location, return None. if (ExpansionRanges.find_as(MacroExpansionLoc) == ExpansionRanges.end()) - return llvm::None; + return std::nullopt; // There was macro expansion, but resulted in no tokens, return empty string. const auto It = ExpandedTokens.find_as(MacroExpansionLoc); @@ -117,11 +117,11 @@ MacroExpansionContext::getExpandedText(SourceLocation MacroExpansionLoc) const { Optional MacroExpansionContext::getOriginalText(SourceLocation MacroExpansionLoc) const { if (MacroExpansionLoc.isMacroID()) - return llvm::None; + return std::nullopt; const auto It = ExpansionRanges.find_as(MacroExpansionLoc); if (It == ExpansionRanges.end()) - return llvm::None; + return std::nullopt; assert(It->getFirst() != It->getSecond() && "Every macro expansion must cover a non-empty range."); diff --git a/clang/lib/Analysis/PathDiagnostic.cpp b/clang/lib/Analysis/PathDiagnostic.cpp index bb5f116..c6303cc 100644 --- a/clang/lib/Analysis/PathDiagnostic.cpp +++ b/clang/lib/Analysis/PathDiagnostic.cpp @@ -239,7 +239,7 @@ compareControlFlow(const PathDiagnosticControlFlowPiece &X, FullSourceLoc YEL = Y.getEndLocation().asLocation(); if (XEL != YEL) return XEL.isBeforeInTranslationUnitThan(YEL); - return None; + return std::nullopt; } static Optional compareMacro(const PathDiagnosticMacroPiece &X, @@ -305,7 +305,7 @@ static Optional comparePiece(const PathDiagnosticPiece &X, case PathDiagnosticPiece::Event: case PathDiagnosticPiece::Note: case PathDiagnosticPiece::PopUp: - return None; + return std::nullopt; } llvm_unreachable("all cases handled"); } @@ -323,7 +323,7 @@ static Optional comparePath(const PathPieces &X, const PathPieces &Y) { return b.value(); } - return None; + return std::nullopt; } static bool compareCrossTUSourceLocs(FullSourceLoc XL, FullSourceLoc YL) { @@ -367,7 +367,7 @@ static bool compare(const PathDiagnostic &X, const PathDiagnostic &Y) { return X.getShortDescription() < Y.getShortDescription(); auto CompareDecls = [&XL](const Decl *D1, const Decl *D2) -> Optional { if (D1 == D2) - return None; + return std::nullopt; if (!D1) return true; if (!D2) @@ -379,7 +379,7 @@ static bool compare(const PathDiagnostic &X, const PathDiagnostic &Y) { return compareCrossTUSourceLocs(FullSourceLoc(D1L, SM), FullSourceLoc(D2L, SM)); } - return None; + return std::nullopt; }; if (auto Result = CompareDecls(X.getDeclWithIssue(), Y.getDeclWithIssue())) return *Result; diff --git a/clang/lib/Analysis/RetainSummaryManager.cpp b/clang/lib/Analysis/RetainSummaryManager.cpp index 143c037..f17ad91 100644 --- a/clang/lib/Analysis/RetainSummaryManager.cpp +++ b/clang/lib/Analysis/RetainSummaryManager.cpp @@ -71,7 +71,7 @@ Optional RetainSummaryManager::hasAnyEnabledAttrOf(const Decl *D, if (isOneOf()) { if (!TrackObjCAndCFObjects) - return None; + return std::nullopt; K = ObjKind::CF; } else if (isOneOf RetainSummaryManager::hasAnyEnabledAttrOf(const Decl *D, NSReturnsNotRetainedAttr, NSConsumesSelfAttr>()) { if (!TrackObjCAndCFObjects) - return None; + return std::nullopt; if (isOneOf() && !cocoa::isCocoaObjectRef(QT)) - return None; + return std::nullopt; K = ObjKind::ObjC; } else if (isOneOf()) { if (!TrackOSObjects) - return None; + return std::nullopt; K = ObjKind::OS; } else if (isOneOf RetainSummaryManager::hasAnyEnabledAttrOf(const Decl *D, } if (D->hasAttr()) return K; - return None; + return std::nullopt; } template @@ -724,7 +724,7 @@ RetainSummaryManager::canEval(const CallExpr *CE, const FunctionDecl *FD, IdentifierInfo *II = FD->getIdentifier(); if (!II) - return None; + return std::nullopt; StringRef FName = II->getName(); FName = FName.substr(FName.find_first_not_of('_')); @@ -741,7 +741,7 @@ RetainSummaryManager::canEval(const CallExpr *CE, const FunctionDecl *FD, FName == "CMBufferQueueDequeueIfDataReadyAndRetain") { // Part of: . // These are not retain. They just return something and retain it. - return None; + return std::nullopt; } if (CE->getNumArgs() == 1 && (cocoa::isRefType(ResultTy, "CF", FName) || @@ -781,7 +781,7 @@ RetainSummaryManager::canEval(const CallExpr *CE, const FunctionDecl *FD, return BehaviorSummary::NoOp; } - return None; + return std::nullopt; } const RetainSummary * @@ -885,7 +885,7 @@ RetainSummaryManager::getRetEffectFromAnnotations(QualType RetTy, if (auto RE = getRetEffectFromAnnotations(RetTy, PD)) return RE; - return None; + return std::nullopt; } /// \return Whether the chain of typedefs starting from @c QT diff --git a/clang/lib/Analysis/UninitializedValues.cpp b/clang/lib/Analysis/UninitializedValues.cpp index 8f9230c..5668862 100644 --- a/clang/lib/Analysis/UninitializedValues.cpp +++ b/clang/lib/Analysis/UninitializedValues.cpp @@ -90,7 +90,7 @@ void DeclToIndex::computeMap(const DeclContext &dc) { Optional DeclToIndex::getValueIndex(const VarDecl *d) const { llvm::DenseMap::const_iterator I = map.find(d); if (I == map.end()) - return None; + return std::nullopt; return I->second; } -- 2.7.4