67 const MatchFinder::MatchResult &Result) {
68 const auto *Inner = Result.Nodes.getNodeAs<Expr>(
"inner");
69 const auto *Outer = Result.Nodes.getNodeAs<Stmt>(
"outer");
70 const auto *Next =
nextStmt(Result, Outer);
74 SourceLocation OuterLoc = Outer->getBeginLoc();
75 if (Result.Nodes.getNodeAs<Stmt>(
"else"))
76 OuterLoc = cast<IfStmt>(Outer)->getElseLoc();
84 while (!InnerRanges.empty() && !OuterRanges.empty() && !NextRanges.empty() &&
85 InnerRanges.back() == OuterRanges.back() &&
86 InnerRanges.back() == NextRanges.back()) {
87 InnerRanges.pop_back();
88 OuterRanges.pop_back();
89 NextRanges.pop_back();
94 if (InnerRanges.empty() || NextRanges.empty() ||
95 InnerRanges.back() != NextRanges.back())
98 diag(InnerRanges.back().getBegin(),
"multiple statement macro used without "
99 "braces; some statements will be "
100 "unconditionally executed");