diff --git a/tools/index-test/index-test.cpp b/tools/index-test/index-test.cpp
index b7471a1..63c86aa 100644
--- a/tools/index-test/index-test.cpp
+++ b/tools/index-test/index-test.cpp
@@ -150,18 +150,27 @@
   }
 }
 
+static Decl *getDeclFromExpr(Stmt *E) {
+  if (DeclRefExpr *RefExpr = dyn_cast<DeclRefExpr>(E))
+    return RefExpr->getDecl();
+  if (MemberExpr *ME = dyn_cast<MemberExpr>(E))
+    return ME->getMemberDecl();
+  if (CallExpr *CE = dyn_cast<CallExpr>(E))
+    return getDeclFromExpr(CE->getCallee());
+  if (CastExpr *CE = dyn_cast<CastExpr>(E))
+    return getDeclFromExpr(CE->getSubExpr());
+  
+  return 0;
+}
+
 static void ProcessASTLocation(ASTLocation ASTLoc, IndexProvider &IdxProvider) {
   assert(ASTLoc.isValid());
 
   Decl *D = 0;
-  if (ASTLoc.isStmt()) {
-    if (DeclRefExpr *RefExpr = dyn_cast<DeclRefExpr>(ASTLoc.getStmt()))
-      D = RefExpr->getDecl();
-    else if (MemberExpr *ME = dyn_cast<MemberExpr>(ASTLoc.getStmt()))
-      D = ME->getMemberDecl();
-  } else {
+  if (ASTLoc.isStmt())
+    D = getDeclFromExpr(ASTLoc.getStmt());
+  else
     D = ASTLoc.getDecl();
-  }
   
   if (D == 0) {
     llvm::errs() << "Error: Couldn't get a Decl out of the ASTLocation";
