diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-22 02:10:41 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-02-22 02:10:41 +0000 |
| commit | a1bed4cd96141eb92e94acd56d02167ec007626e (patch) | |
| tree | 83de603fe9fa0e6b07d3786c92ecbf2abad6023b | |
| parent | fd555f6b1fd950eff620e74da887dc37d919a276 (diff) | |
| download | bcm5719-llvm-a1bed4cd96141eb92e94acd56d02167ec007626e.tar.gz bcm5719-llvm-a1bed4cd96141eb92e94acd56d02167ec007626e.zip | |
[libclang] Index the field references of a designated initializer, rdar://10906206
llvm-svn: 151118
| -rw-r--r-- | clang/test/Index/index-refs.cpp | 11 | ||||
| -rw-r--r-- | clang/tools/libclang/IndexBody.cpp | 11 |
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/test/Index/index-refs.cpp b/clang/test/Index/index-refs.cpp index 56afa08ec88..77e2af71f88 100644 --- a/clang/test/Index/index-refs.cpp +++ b/clang/test/Index/index-refs.cpp @@ -61,6 +61,14 @@ typedef int some_arr[array_size]; const int default_param = 3; void foo4(int p = default_param); +struct S2 { + int x,y; +}; + +void foo5() { + struct S2 s = { .y = 1, .x = 4}; +} + // RUN: c-index-test -index-file %s | FileCheck %s // CHECK: [indexDeclaration]: kind: namespace | name: NS // CHECK-NEXT: [indexDeclaration]: kind: variable | name: gx @@ -108,3 +116,6 @@ void foo4(int p = default_param); // CHECK: [indexEntityReference]: kind: variable | name: array_size | {{.*}} | loc: 59:22 // CHECK: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19 // CHECK-NOT: [indexEntityReference]: kind: variable | name: default_param | {{.*}} | loc: 62:19 + +// CHECK: [indexEntityReference]: kind: field | name: y | {{.*}} | loc: 69:20 +// CHECK-NEXT: [indexEntityReference]: kind: field | name: x | {{.*}} | loc: 69:28 diff --git a/clang/tools/libclang/IndexBody.cpp b/clang/tools/libclang/IndexBody.cpp index 9330194ceec..cce0bf705aa 100644 --- a/clang/tools/libclang/IndexBody.cpp +++ b/clang/tools/libclang/IndexBody.cpp @@ -51,6 +51,17 @@ public: return true; } + bool VisitDesignatedInitExpr(DesignatedInitExpr *E) { + for (DesignatedInitExpr::reverse_designators_iterator + D = E->designators_rbegin(), DEnd = E->designators_rend(); + D != DEnd; ++D) { + if (D->isFieldDesignator()) + IndexCtx.handleReference(D->getField(), D->getFieldLoc(), + Parent, ParentDC, E); + } + return true; + } + bool VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { IndexCtx.handleReference(E->getDecl(), E->getLocation(), Parent, ParentDC, E); |

