diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Index/IndexBody.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Index/IndexBody.cpp b/clang/lib/Index/IndexBody.cpp index 0606873167d..a0e9131136e 100644 --- a/clang/lib/Index/IndexBody.cpp +++ b/clang/lib/Index/IndexBody.cpp @@ -300,6 +300,7 @@ public: IndexingContext &IndexCtx; const NamedDecl *Parent; const DeclContext *ParentDC; + bool Visited = false; public: SyntacticFormIndexer(IndexingContext &indexCtx, @@ -308,6 +309,22 @@ public: bool shouldWalkTypesOfTypeLocs() const { return false; } + bool TraverseInitListExpr(InitListExpr *S, DataRecursionQueue *Q = nullptr) { + // Don't visit nested InitListExprs, this visitor will be called again + // later on for the nested ones. + if (Visited) + return true; + Visited = true; + InitListExpr *SyntaxForm = S->isSemanticForm() ? S->getSyntacticForm() : S; + if (SyntaxForm) { + for (Stmt *SubStmt : SyntaxForm->children()) { + if (!TraverseStmt(SubStmt, Q)) + return false; + } + } + return true; + } + bool VisitDesignatedInitExpr(DesignatedInitExpr *E) { for (DesignatedInitExpr::Designator &D : llvm::reverse(E->designators())) { if (D.isFieldDesignator()) |