[RecursiveASTVisitor] Introduce dataTraverseStmtPre()/dataTraverseStmtPost() to allow clients to do before/after actions during data recursive visitation.

This should fix the asan bot that hits stack overflow in a couple of test/Index tests.

llvm-svn: 260785
diff --git a/clang/lib/Index/IndexBody.cpp b/clang/lib/Index/IndexBody.cpp
index 56fba28..f716445 100644
--- a/clang/lib/Index/IndexBody.cpp
+++ b/clang/lib/Index/IndexBody.cpp
@@ -29,11 +29,15 @@
   
   bool shouldWalkTypesOfTypeLocs() const { return false; }
 
-  bool TraverseStmt(Stmt *S) {
+  bool dataTraverseStmtPre(Stmt *S) {
     StmtStack.push_back(S);
-    bool ret = base::TraverseStmt(S);
+    return true;
+  }
+
+  bool dataTraverseStmtPost(Stmt *S) {
+    assert(StmtStack.back() == S);
     StmtStack.pop_back();
-    return ret;
+    return true;
   }
 
   bool TraverseTypeLoc(TypeLoc TL) {