Author: rksimon Date: Sat Oct 5 06:42:14 2019 New Revision: 373829 URL: http://llvm.org/viewvc/llvm-project?rev=373829&view=rev Log: RewriteObjC - silence static analyzer getAs<> null dereference warnings. NFCI.
The static analyzer is warning about potential null dereferences, but we should be able to use castAs<> directly and if not assert will fire for us. Modified: cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp Modified: cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp?rev=373829&r1=373828&r2=373829&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp (original) +++ cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp Sat Oct 5 06:42:14 2019 @@ -416,7 +416,7 @@ namespace { /// otherwise. bool convertBlockPointerToFunctionPointer(QualType &T) { if (isTopLevelBlockPointerType(T)) { - const BlockPointerType *BPT = T->getAs<BlockPointerType>(); + const auto *BPT = T->castAs<BlockPointerType>(); T = Context->getPointerType(BPT->getPointeeType()); return true; } @@ -1163,6 +1163,7 @@ void RewriteObjC::RewriteObjCMethodDecl( void RewriteObjC::RewriteImplementationDecl(Decl *OID) { ObjCImplementationDecl *IMD = dyn_cast<ObjCImplementationDecl>(OID); ObjCCategoryImplDecl *CID = dyn_cast<ObjCCategoryImplDecl>(OID); + assert((IMD || CID) && "Unknown ImplementationDecl"); InsertText(IMD ? IMD->getBeginLoc() : CID->getBeginLoc(), "// "); @@ -2017,7 +2018,7 @@ RewriteObjC::SynthesizeCallToFunctionDec ImplicitCastExpr::Create(*Context, pToFunc, CK_FunctionToPointerDecay, DRE, nullptr, VK_RValue); - const FunctionType *FT = msgSendType->getAs<FunctionType>(); + const auto *FT = msgSendType->castAs<FunctionType>(); CallExpr *Exp = CallExpr::Create( *Context, ICE, Args, FT->getCallResultType(*Context), VK_RValue, EndLoc); @@ -2285,7 +2286,7 @@ void RewriteObjC::RewriteBlockPointerTyp void RewriteObjC::RewriteBlockLiteralFunctionDecl(FunctionDecl *FD) { SourceLocation FunLocStart = FD->getTypeSpecStartLoc(); const FunctionType *funcType = FD->getType()->getAs<FunctionType>(); - const FunctionProtoType *proto = dyn_cast<FunctionProtoType>(funcType); + const FunctionProtoType *proto = dyn_cast_or_null<FunctionProtoType>(funcType); if (!proto) return; QualType Type = proto->getReturnType(); @@ -2604,7 +2605,7 @@ CallExpr *RewriteObjC::SynthMsgSendStret // Don't forget the parens to enforce the proper binding. ParenExpr *PE = new (Context) ParenExpr(SourceLocation(), SourceLocation(), cast); - const FunctionType *FT = msgSendType->getAs<FunctionType>(); + const auto *FT = msgSendType->castAs<FunctionType>(); CallExpr *STCE = CallExpr::Create(*Context, PE, MsgExprs, FT->getReturnType(), VK_RValue, SourceLocation()); return STCE; @@ -2735,8 +2736,8 @@ Stmt *RewriteObjC::SynthMessageExpr(ObjC case ObjCMessageExpr::Class: { SmallVector<Expr*, 8> ClsExprs; - ObjCInterfaceDecl *Class - = Exp->getClassReceiver()->getAs<ObjCObjectType>()->getInterface(); + auto *Class = + Exp->getClassReceiver()->castAs<ObjCObjectType>()->getInterface(); IdentifierInfo *clsName = Class->getIdentifier(); ClsExprs.push_back(getStringLiteral(clsName->getName())); CallExpr *Cls = SynthesizeCallToFunctionDecl(GetClassFunctionDecl, ClsExprs, @@ -2957,7 +2958,7 @@ Stmt *RewriteObjC::SynthMessageExpr(ObjC // Don't forget the parens to enforce the proper binding. ParenExpr *PE = new (Context) ParenExpr(StartLoc, EndLoc, cast); - const FunctionType *FT = msgSendType->getAs<FunctionType>(); + const auto *FT = msgSendType->castAs<FunctionType>(); CallExpr *CE = CallExpr::Create(*Context, PE, MsgExprs, FT->getReturnType(), VK_RValue, EndLoc); Stmt *ReplacingStmt = CE; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits