diff options
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 109 |
1 files changed, 55 insertions, 54 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 592de529b59..83fb1d78337 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -871,12 +871,13 @@ bool Sema::CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall, /// Checks function calls when a FunctionDecl or a NamedDecl is not available, /// such as function pointers returned from functions. bool Sema::CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto) { - VariadicCallType CallType = getVariadicCallType(/*FDecl=*/0, Proto, + VariadicCallType CallType = getVariadicCallType(/*FDecl=*/nullptr, Proto, TheCall->getCallee()); unsigned NumParams = Proto ? Proto->getNumParams() : 0; - checkCall(/*FDecl=*/0, llvm::makeArrayRef<const Expr *>( - TheCall->getArgs(), TheCall->getNumArgs()), + checkCall(/*FDecl=*/nullptr, + llvm::makeArrayRef<const Expr *>(TheCall->getArgs(), + TheCall->getNumArgs()), NumParams, /*IsMemberFunction=*/false, TheCall->getRParenLoc(), TheCall->getCallee()->getSourceRange(), CallType); @@ -1530,7 +1531,7 @@ Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) { LookupName(Res, TUScope, /*AllowBuiltinCreation=*/true); assert(Res.getFoundDecl()); NewBuiltinDecl = dyn_cast<FunctionDecl>(Res.getFoundDecl()); - if (NewBuiltinDecl == 0) + if (!NewBuiltinDecl) return ExprError(); } @@ -1772,7 +1773,7 @@ bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) { if (CastArg->getType()->isSpecificBuiltinType(BuiltinType::Float)) { assert(Cast->getType()->isSpecificBuiltinType(BuiltinType::Double) && "promotion from float to double is the only expected cast here"); - Cast->setSubExpr(0); + Cast->setSubExpr(nullptr); TheCall->setArg(NumArgs-1, CastArg); } } @@ -1857,7 +1858,7 @@ ExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) { for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; i++) { exprs.push_back(TheCall->getArg(i)); - TheCall->setArg(i, 0); + TheCall->setArg(i, nullptr); } return Owned(new (Context) ShuffleVectorExpr(Context, exprs, resType, @@ -2145,7 +2146,7 @@ checkFormatStringExpr(Sema &S, const Expr *E, ArrayRef<const Expr *> Args, } case Stmt::ObjCStringLiteralClass: case Stmt::StringLiteralClass: { - const StringLiteral *StrE = NULL; + const StringLiteral *StrE = nullptr; if (const ObjCStringLiteral *ObjCFExpr = dyn_cast<ObjCStringLiteral>(E)) StrE = ObjCFExpr->getString(); @@ -3760,8 +3761,8 @@ static unsigned getAbsoluteValueFunctionKind(const FunctionDecl *FDecl) { static void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) { bool EmitHeaderHint = true; - const char *HeaderName = 0; - const char *FunctionName = 0; + const char *HeaderName = nullptr; + const char *FunctionName = nullptr; if (S.getLangOpts().CPlusPlus && !ArgType->isAnyComplexType()) { FunctionName = "std::abs"; if (ArgType->isIntegralOrEnumerationType()) { @@ -3779,7 +3780,7 @@ static void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, S.LookupQualifiedName(R, Std); for (const auto *I : R) { - const FunctionDecl *FDecl = 0; + const FunctionDecl *FDecl = nullptr; if (const UsingShadowDecl *UsingD = dyn_cast<UsingShadowDecl>(I)) { FDecl = dyn_cast<FunctionDecl>(UsingD->getTargetDecl()); } else { @@ -3981,7 +3982,7 @@ static const Expr *getSizeOfExprArg(const Expr* E) { if (SizeOf->getKind() == clang::UETT_SizeOf && !SizeOf->isArgumentType()) return SizeOf->getArgumentExpr()->IgnoreParenImpCasts(); - return 0; + return nullptr; } /// \brief If E is a sizeof expression, returns its argument type. @@ -4203,7 +4204,7 @@ void Sema::CheckStrlcpycatArguments(const CallExpr *Call, const Expr *SrcArg = ignoreLiteralAdditions(Call->getArg(1), Context); const Expr *SizeArg = ignoreLiteralAdditions(Call->getArg(2), Context); - const Expr *CompareWithSrc = NULL; + const Expr *CompareWithSrc = nullptr; if (CheckMemorySizeofForComparison(*this, SizeArg, FnName, Call->getLocStart(), Call->getRParenLoc())) @@ -4252,7 +4253,7 @@ void Sema::CheckStrlcpycatArguments(const CallExpr *Call, SmallString<128> sizeString; llvm::raw_svector_ostream OS(sizeString); OS << "sizeof("; - DstArg->printPretty(OS, 0, getPrintingPolicy()); + DstArg->printPretty(OS, nullptr, getPrintingPolicy()); OS << ")"; Diag(OriginalSizeArg->getLocStart(), diag::note_strlcpycat_wrong_size) @@ -4272,10 +4273,10 @@ static const Expr *getStrlenExprArg(const Expr *E) { if (const CallExpr *CE = dyn_cast<CallExpr>(E)) { const FunctionDecl *FD = CE->getDirectCallee(); if (!FD || FD->getMemoryFunctionKind() != Builtin::BIstrlen) - return 0; + return nullptr; return CE->getArg(0)->IgnoreParenCasts(); } - return 0; + return nullptr; } // Warn on anti-patterns as the 'size' argument to strncat. @@ -4353,10 +4354,10 @@ void Sema::CheckStrncatArguments(const CallExpr *CE, SmallString<128> sizeString; llvm::raw_svector_ostream OS(sizeString); OS << "sizeof("; - DstArg->printPretty(OS, 0, getPrintingPolicy()); + DstArg->printPretty(OS, nullptr, getPrintingPolicy()); OS << ") - "; OS << "strlen("; - DstArg->printPretty(OS, 0, getPrintingPolicy()); + DstArg->printPretty(OS, nullptr, getPrintingPolicy()); OS << ") - 1"; Diag(SL, diag::note_strncat_wrong_size) @@ -4376,19 +4377,19 @@ static void CheckReturnStackAddr(Sema &S, Expr *RetValExp, QualType lhsType, SourceLocation ReturnLoc) { - Expr *stackE = 0; + Expr *stackE = nullptr; SmallVector<DeclRefExpr *, 8> refVars; // Perform checking for returned stack addresses, local blocks, // label addresses or references to temporaries. if (lhsType->isPointerType() || (!S.getLangOpts().ObjCAutoRefCount && lhsType->isBlockPointerType())) { - stackE = EvalAddr(RetValExp, refVars, /*ParentDecl=*/0); + stackE = EvalAddr(RetValExp, refVars, /*ParentDecl=*/nullptr); } else if (lhsType->isReferenceType()) { - stackE = EvalVal(RetValExp, refVars, /*ParentDecl=*/0); + stackE = EvalVal(RetValExp, refVars, /*ParentDecl=*/nullptr); } - if (stackE == 0) + if (!stackE) return; // Nothing suspicious was found. SourceLocation diagLoc; @@ -4462,7 +4463,7 @@ CheckReturnStackAddr(Sema &S, Expr *RetValExp, QualType lhsType, static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, Decl *ParentDecl) { if (E->isTypeDependent()) - return NULL; + return nullptr; // We should only be called for evaluating pointer expressions. assert((E->getType()->isAnyPointerType() || @@ -4481,7 +4482,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, // If we leave the immediate function, the lifetime isn't about to end. if (DR->refersToEnclosingLocal()) - return 0; + return nullptr; if (VarDecl *V = dyn_cast<VarDecl>(DR->getDecl())) // If this is a reference variable, follow through to the expression that @@ -4493,7 +4494,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, return EvalAddr(V->getInit(), refVars, ParentDecl); } - return NULL; + return nullptr; } case Stmt::UnaryOperatorClass: { @@ -4504,7 +4505,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, if (U->getOpcode() == UO_AddrOf) return EvalVal(U->getSubExpr(), refVars, ParentDecl); else - return NULL; + return nullptr; } case Stmt::BinaryOperatorClass: { @@ -4514,7 +4515,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, BinaryOperatorKind op = B->getOpcode(); if (op != BO_Add && op != BO_Sub) - return NULL; + return nullptr; Expr *Base = B->getLHS(); @@ -4542,7 +4543,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, // In C++, we can have a throw-expression, which has 'void' type. if (C->getRHS()->getType()->isVoidType()) - return 0; + return nullptr; return EvalAddr(C->getRHS(), refVars, ParentDecl); } @@ -4550,7 +4551,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, case Stmt::BlockExprClass: if (cast<BlockExpr>(E)->getBlockDecl()->hasCaptures()) return E; // local block. - return NULL; + return nullptr; case Stmt::AddrLabelExprClass: return E; // address of label. @@ -4587,7 +4588,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, return EvalVal(SubExpr, refVars, ParentDecl); default: - return 0; + return nullptr; } } @@ -4601,7 +4602,7 @@ static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars, // Everything else: we simply don't reason about them. default: - return NULL; + return nullptr; } } @@ -4627,7 +4628,7 @@ do { E = IE->getSubExpr(); continue; } - return NULL; + return nullptr; } case Stmt::ExprWithCleanupsClass: @@ -4641,7 +4642,7 @@ do { // If we leave the immediate function, the lifetime isn't about to end. if (DR->refersToEnclosingLocal()) - return 0; + return nullptr; if (VarDecl *V = dyn_cast<VarDecl>(DR->getDecl())) { // Check if it refers to itself, e.g. "int& i = i;". @@ -4662,7 +4663,7 @@ do { } } - return NULL; + return nullptr; } case Stmt::UnaryOperatorClass: { @@ -4674,7 +4675,7 @@ do { if (U->getOpcode() == UO_Deref) return EvalAddr(U->getSubExpr(), refVars, ParentDecl); - return NULL; + return nullptr; } case Stmt::ArraySubscriptExprClass: { @@ -4699,7 +4700,7 @@ do { // In C++, we can have a throw-expression, which has 'void' type. if (C->getRHS()->getType()->isVoidType()) - return 0; + return nullptr; return EvalVal(C->getRHS(), refVars, ParentDecl); } @@ -4710,12 +4711,12 @@ do { // Check for indirect access. We only want direct field accesses. if (M->isArrow()) - return NULL; + return nullptr; // Check whether the member type is itself a reference, in which case // we're not going to refer to the member, but to what the member refers to. if (M->getMemberDecl()->getType()->isReferenceType()) - return NULL; + return nullptr; return EvalVal(M->getBase(), refVars, ParentDecl); } @@ -4735,7 +4736,7 @@ do { return E; // Everything else: we simply don't reason about them. - return NULL; + return nullptr; } } while (true); } @@ -5467,7 +5468,7 @@ static void DiagnoseOutOfRangeComparison(Sema &S, BinaryOperator *E, // If this is a comparison to an enum constant, include that // constant in the diagnostic. - const EnumConstantDecl *ED = 0; + const EnumConstantDecl *ED = nullptr; if (const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(Constant)) ED = dyn_cast<EnumConstantDecl>(DR->getDecl()); @@ -5772,7 +5773,7 @@ void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, } void CheckImplicitConversion(Sema &S, Expr *E, QualType T, - SourceLocation CC, bool *ICContext = 0) { + SourceLocation CC, bool *ICContext = nullptr) { if (E->isTypeDependent() || E->isValueDependent()) return; const Type *Source = S.Context.getCanonicalType(E->getType()).getTypePtr(); @@ -6178,7 +6179,7 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E, } // Expect to find a single Decl. Skip anything more complicated. - ValueDecl *D = 0; + ValueDecl *D = nullptr; if (DeclRefExpr *R = dyn_cast<DeclRefExpr>(E)) { D = R->getDecl(); } else if (MemberExpr *M = dyn_cast<MemberExpr>(E)) { @@ -6209,7 +6210,7 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E, // Pretty print the expression for the diagnostic. std::string Str; llvm::raw_string_ostream S(Str); - E->printPretty(S, 0, getPrintingPolicy()); + E->printPretty(S, nullptr, getPrintingPolicy()); unsigned DiagID = IsCompare ? diag::warn_null_pointer_compare : diag::warn_impcast_pointer_to_bool; @@ -6384,7 +6385,7 @@ class SequenceChecker : public EvaluatedExprVisitor<SequenceChecker> { }; struct Usage { - Usage() : Use(0), Seq() {} + Usage() : Use(nullptr), Seq() {} Expr *Use; SequenceTree::Seq Seq; }; @@ -6484,7 +6485,7 @@ class SequenceChecker : public EvaluatedExprVisitor<SequenceChecker> { } else if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) // FIXME: If this is a reference, map through to its value. return DRE->getDecl(); - return 0; + return nullptr; } /// \brief Note that an object was modified or used by an expression. @@ -6544,8 +6545,8 @@ class SequenceChecker : public EvaluatedExprVisitor<SequenceChecker> { public: SequenceChecker(Sema &S, Expr *E, SmallVectorImpl<Expr *> &WorkList) - : Base(S.Context), SemaRef(S), Region(Tree.root()), ModAsSideEffect(0), - WorkList(WorkList), EvalTracker(0) { + : Base(S.Context), SemaRef(S), Region(Tree.root()), + ModAsSideEffect(nullptr), WorkList(WorkList), EvalTracker(nullptr) { Visit(E); } @@ -6830,7 +6831,7 @@ bool Sema::CheckParmsForFunctionDef(ParmVarDecl *const *P, // C99 6.9.1p5: If the declarator includes a parameter type list, the // declaration of each parameter shall include an identifier. if (CheckParameterNames && - Param->getIdentifier() == 0 && + Param->getIdentifier() == nullptr && !Param->isImplicit() && !getLangOpts().CPlusPlus) Diag(Param->getLocation(), diag::err_parameter_name_omitted); @@ -6997,7 +6998,7 @@ void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, if (IndexNegated) index = -index; - const NamedDecl *ND = NULL; + const NamedDecl *ND = nullptr; if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(BaseExpr)) ND = dyn_cast<NamedDecl>(DRE->getDecl()); if (const MemberExpr *ME = dyn_cast<MemberExpr>(BaseExpr)) @@ -7140,7 +7141,7 @@ void Sema::CheckArrayAccess(const Expr *expr) { namespace { struct RetainCycleOwner { - RetainCycleOwner() : Variable(0), Indirect(false) {} + RetainCycleOwner() : Variable(nullptr), Indirect(false) {} VarDecl *Variable; SourceRange Range; SourceLocation Loc; @@ -7251,7 +7252,7 @@ namespace { struct FindCaptureVisitor : EvaluatedExprVisitor<FindCaptureVisitor> { FindCaptureVisitor(ASTContext &Context, VarDecl *variable) : EvaluatedExprVisitor<FindCaptureVisitor>(Context), - Variable(variable), Capturer(0) {} + Variable(variable), Capturer(nullptr) {} VarDecl *Variable; Expr *Capturer; @@ -7295,7 +7296,7 @@ static Expr *findCapturingExpr(Sema &S, Expr *e, RetainCycleOwner &owner) { if (Cmd.isUnarySelector() && Cmd.getNameForSlot(0) == "copy") { e = ME->getInstanceReceiver(); if (!e) - return 0; + return nullptr; e = e->IgnoreParenCasts(); } } else if (CallExpr *CE = dyn_cast<CallExpr>(e)) { @@ -7312,7 +7313,7 @@ static Expr *findCapturingExpr(Sema &S, Expr *e, RetainCycleOwner &owner) { BlockExpr *block = dyn_cast<BlockExpr>(e); if (!block || !block->getBlockDecl()->capturesVariable(owner.Variable)) - return 0; + return nullptr; FindCaptureVisitor visitor(S.Context, owner.Variable); visitor.Visit(block->getBlockDecl()->getBody()); @@ -7388,7 +7389,7 @@ void Sema::checkRetainCycles(Expr *receiver, Expr *argument) { void Sema::checkRetainCycles(VarDecl *Var, Expr *Init) { RetainCycleOwner Owner; - if (!considerVariable(Var, /*DeclRefExpr=*/0, Owner)) + if (!considerVariable(Var, /*DeclRefExpr=*/nullptr, Owner)) return; // Because we don't have an expression for the variable, we have to set the @@ -7899,7 +7900,7 @@ bool GetMatchingCType( FoundWrongKind = false; // Variable declaration that has type_tag_for_datatype attribute. - const ValueDecl *VD = NULL; + const ValueDecl *VD = nullptr; uint64_t MagicValue; |