@@ -78,33 +78,44 @@ void IdDependentBackwardBranchCheck::registerMatchers(MatchFinder *Finder) {
7878
7979IdDependentBackwardBranchCheck::IdDependencyRecord *
8080IdDependentBackwardBranchCheck::hasIdDepVar (const Expr *Expression) {
81+ if (!Expression)
82+ return nullptr ;
83+
8184 if (const auto *Declaration = dyn_cast<DeclRefExpr>(Expression)) {
8285 // It is a DeclRefExpr, so check if it's an ID-dependent variable.
83- const auto *CheckVariable = dyn_cast<VarDecl>(Declaration->getDecl ());
86+ const auto *CheckVariable =
87+ dyn_cast_if_present<VarDecl>(Declaration->getDecl ());
88+ if (!CheckVariable)
89+ return nullptr ;
8490 auto FoundVariable = IdDepVarsMap.find (CheckVariable);
8591 if (FoundVariable == IdDepVarsMap.end ())
8692 return nullptr ;
8793 return &(FoundVariable->second );
8894 }
8995 for (const auto *Child : Expression->children ())
90- if (const auto *ChildExpression = dyn_cast <Expr>(Child))
96+ if (const auto *ChildExpression = dyn_cast_if_present <Expr>(Child))
9197 if (IdDependencyRecord *Result = hasIdDepVar (ChildExpression))
9298 return Result;
9399 return nullptr ;
94100}
95101
96102IdDependentBackwardBranchCheck::IdDependencyRecord *
97103IdDependentBackwardBranchCheck::hasIdDepField (const Expr *Expression) {
104+ if (!Expression)
105+ return nullptr ;
106+
98107 if (const auto *MemberExpression = dyn_cast<MemberExpr>(Expression)) {
99108 const auto *CheckField =
100- dyn_cast<FieldDecl>(MemberExpression->getMemberDecl ());
109+ dyn_cast_if_present<FieldDecl>(MemberExpression->getMemberDecl ());
110+ if (!CheckField)
111+ return nullptr ;
101112 auto FoundField = IdDepFieldsMap.find (CheckField);
102113 if (FoundField == IdDepFieldsMap.end ())
103114 return nullptr ;
104115 return &(FoundField->second );
105116 }
106117 for (const auto *Child : Expression->children ())
107- if (const auto *ChildExpression = dyn_cast <Expr>(Child))
118+ if (const auto *ChildExpression = dyn_cast_if_present <Expr>(Child))
108119 if (IdDependencyRecord *Result = hasIdDepField (ChildExpression))
109120 return Result;
110121 return nullptr ;
0 commit comments