[prev in list] [next in list] [prev in thread] [next in thread]
List: cfe-commits
Subject: r285647 - [index] Fix repeated visitation of the same InitListExpr for indexing.
From: Argyrios Kyrtzidis via cfe-commits <cfe-commits () lists ! llvm ! org>
Date: 2016-10-31 22:12:13
Message-ID: 20161031221213.AD8003128002 () llvm ! org
[Download RAW message or body]
Author: akirtzidis
Date: Mon Oct 31 17:12:12 2016
New Revision: 285647
URL: http://llvm.org/viewvc/llvm-project?rev=285647&view=rev
Log:
[index] Fix repeated visitation of the same InitListExpr for indexing.
It was visited multiple times unnecessarily.
rdar://28985038
Added:
cfe/trunk/test/Index/Core/designated-inits.c
Modified:
cfe/trunk/lib/Index/IndexBody.cpp
Modified: cfe/trunk/lib/Index/IndexBody.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/IndexBody.cpp?rev=285647&r1=285646&r2=285647&view=diff
==============================================================================
--- cfe/trunk/lib/Index/IndexBody.cpp (original)
+++ cfe/trunk/lib/Index/IndexBody.cpp Mon Oct 31 17:12:12 2016
@@ -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())
Added: cfe/trunk/test/Index/Core/designated-inits.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Core/designated-inits.c?rev=285647&view=auto
==============================================================================
--- cfe/trunk/test/Index/Core/designated-inits.c (added)
+++ cfe/trunk/test/Index/Core/designated-inits.c Mon Oct 31 17:12:12 2016
@@ -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 |
+ },
+ },
+ },
+ },
+ },
+};
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic