]> granicus.if.org Git - clang/commitdiff
[libclang] Index the field references of a designated initializer, rdar://10906206
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 22 Feb 2012 02:10:41 +0000 (02:10 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 22 Feb 2012 02:10:41 +0000 (02:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151118 91177308-0d34-0410-b5e6-96231b3b80d8

test/Index/index-refs.cpp
tools/libclang/IndexBody.cpp

index 56afa08ec88a1ba82cd8e0242de19937710ecac2..77e2af71f885e5d4962771022052076d32a21d6b 100644 (file)
@@ -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
index 9330194ceecb01e04bd6015616c69ac311436061..cce0bf705aa235e26b4651aeba78817af42a41a4 100644 (file)
@@ -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);