diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-05-06 19:08:57 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-05-06 19:08:57 +0000 |
| commit | fe6a01253e96c04e3d45c0dc41e5ca711039d81a (patch) | |
| tree | 1c049e9c495dd0b4307444523894cf691005b9cb /clang | |
| parent | 14b74fd1534ad271bb72276beb781bef195f9efe (diff) | |
| download | bcm5719-llvm-fe6a01253e96c04e3d45c0dc41e5ca711039d81a.tar.gz bcm5719-llvm-fe6a01253e96c04e3d45c0dc41e5ca711039d81a.zip | |
Have the RecursiveASTVisitor traverse the type source info of an objc class message.
llvm-svn: 181237
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/AST/RecursiveASTVisitor.h | 5 | ||||
| -rw-r--r-- | clang/test/Index/index-refs.m | 9 | ||||
| -rw-r--r-- | clang/tools/libclang/IndexBody.cpp | 3 | ||||
| -rw-r--r-- | clang/tools/libclang/RecursiveASTVisitor.h | 5 |
4 files changed, 17 insertions, 5 deletions
diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index eb5a8123c29..b5a4b5e36d7 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -2195,7 +2195,10 @@ DEF_TRAVERSE_STMT(ObjCEncodeExpr, { }) DEF_TRAVERSE_STMT(ObjCIsaExpr, { }) DEF_TRAVERSE_STMT(ObjCIvarRefExpr, { }) -DEF_TRAVERSE_STMT(ObjCMessageExpr, { }) +DEF_TRAVERSE_STMT(ObjCMessageExpr, { + if (TypeSourceInfo *TInfo = S->getClassReceiverTypeInfo()) + TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc())); +}) DEF_TRAVERSE_STMT(ObjCPropertyRefExpr, { }) DEF_TRAVERSE_STMT(ObjCSubscriptRefExpr, { }) DEF_TRAVERSE_STMT(ObjCProtocolExpr, { }) diff --git a/clang/test/Index/index-refs.m b/clang/test/Index/index-refs.m index b82345f9c68..f25013b882f 100644 --- a/clang/test/Index/index-refs.m +++ b/clang/test/Index/index-refs.m @@ -13,6 +13,15 @@ void foo() { @encode(struct FooS); } +@interface I ++(void)clsMeth; +@end + +void foo2() { + [I clsMeth]; +} + // RUN: c-index-test -index-file %s | FileCheck %s // CHECK: [indexEntityReference]: kind: objc-protocol | name: Prot | {{.*}} | loc: 12:27 // CHECK: [indexEntityReference]: kind: struct | name: FooS | {{.*}} | loc: 13:18 +// CHECK: [indexEntityReference]: kind: objc-class | name: I | {{.*}} | loc: 21:4 diff --git a/clang/tools/libclang/IndexBody.cpp b/clang/tools/libclang/IndexBody.cpp index 54711e6332a..02ab885e62f 100644 --- a/clang/tools/libclang/IndexBody.cpp +++ b/clang/tools/libclang/IndexBody.cpp @@ -68,9 +68,6 @@ public: } bool VisitObjCMessageExpr(ObjCMessageExpr *E) { - if (TypeSourceInfo *Cls = E->getClassReceiverTypeInfo()) - IndexCtx.indexTypeSourceInfo(Cls, Parent, ParentDC); - if (ObjCMethodDecl *MD = E->getMethodDecl()) IndexCtx.handleReference(MD, E->getSelectorStartLoc(), Parent, ParentDC, E, diff --git a/clang/tools/libclang/RecursiveASTVisitor.h b/clang/tools/libclang/RecursiveASTVisitor.h index dd2c836d9cf..e45545ed1ad 100644 --- a/clang/tools/libclang/RecursiveASTVisitor.h +++ b/clang/tools/libclang/RecursiveASTVisitor.h @@ -2116,7 +2116,10 @@ DEF_TRAVERSE_STMT(ObjCEncodeExpr, { }) DEF_TRAVERSE_STMT(ObjCIsaExpr, { }) DEF_TRAVERSE_STMT(ObjCIvarRefExpr, { }) -DEF_TRAVERSE_STMT(ObjCMessageExpr, { }) +DEF_TRAVERSE_STMT(ObjCMessageExpr, { + if (TypeSourceInfo *TInfo = S->getClassReceiverTypeInfo()) + TRY_TO(TraverseTypeLoc(TInfo->getTypeLoc())); +}) DEF_TRAVERSE_STMT(ObjCPropertyRefExpr, { }) DEF_TRAVERSE_STMT(ObjCSubscriptRefExpr, { }) DEF_TRAVERSE_STMT(ObjCProtocolExpr, { }) |

