forked from OSchip/llvm-project
[index] Fix repeated visitation of the same InitListExpr for indexing.
It was visited multiple times unnecessarily. rdar://28985038 llvm-svn: 285647
This commit is contained in:
parent
5d51a76994
commit
67eda2ad1d
|
@ -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())
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
// RUN: c-index-test core -print-source-symbols -- %s -target x86_64-apple-macosx10.7 | FileCheck %s
|
||||
|
||||
struct MyStruct {
|
||||
int myfield;
|
||||
};
|
||||
|
||||
enum {
|
||||
MyValToSet;
|
||||
};
|
||||
|
||||
// CHECK: [[@LINE+1]]:14 | struct/C | MyStruct |
|
||||
const struct MyStruct _MyStruct[]
|
||||
[16]
|
||||
[3]
|
||||
[3]
|
||||
[2]
|
||||
[2] = {
|
||||
[0] = {
|
||||
[0] = {
|
||||
[0] = {
|
||||
[0][0] = {
|
||||
[0] = {
|
||||
// CHECK: [[@LINE+2]]:14 | field/C | myfield | {{.*}} | Ref |
|
||||
// CHECK: [[@LINE+1]]:24 | enumerator/C | MyValToSet |
|
||||
.myfield = MyValToSet,
|
||||
// CHECK-NOT: | field/C | myfield |
|
||||
// CHECK-NOT: | enumerator/C | MyValToSet |
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
Loading…
Reference in New Issue