Add support for 'PreStmt' program points to GRCoreEngine and GRStmtNodeBuilder.

llvm-svn: 76792
diff --git a/clang/include/clang/Analysis/PathSensitive/GRCoreEngine.h b/clang/include/clang/Analysis/PathSensitive/GRCoreEngine.h
index 0285ad6..3d8b0ea 100644
--- a/clang/include/clang/Analysis/PathSensitive/GRCoreEngine.h
+++ b/clang/include/clang/Analysis/PathSensitive/GRCoreEngine.h
@@ -142,7 +142,8 @@
   }  
     
   ExplodedNodeImpl*
-  generateNodeImpl(PostStmt PP, const void* State, ExplodedNodeImpl* Pred);
+  generateNodeImpl(const ProgramPoint &PP, const void* State,
+                   ExplodedNodeImpl* Pred);
   
   ExplodedNodeImpl*
   generateNodeImpl(Stmt* S, const void* State, ExplodedNodeImpl* Pred,
diff --git a/clang/lib/Analysis/GRCoreEngine.cpp b/clang/lib/Analysis/GRCoreEngine.cpp
index 5641baa..5a45ad2 100644
--- a/clang/lib/Analysis/GRCoreEngine.cpp
+++ b/clang/lib/Analysis/GRCoreEngine.cpp
@@ -430,11 +430,14 @@
                                         ExplodedNodeImpl* Pred,
                                         ProgramPoint::Kind K,
                                         const void *tag) {
-  return generateNodeImpl(GetPostLoc(S, K, tag), State, Pred); 
+  return K == ProgramPoint::PreStmtKind
+         ? generateNodeImpl(PreStmt(S, tag), State, Pred)
+         : generateNodeImpl(GetPostLoc(S, K, tag), State, Pred); 
 }
 
 ExplodedNodeImpl*
-GRStmtNodeBuilderImpl::generateNodeImpl(PostStmt Loc, const void* State,
+GRStmtNodeBuilderImpl::generateNodeImpl(const ProgramPoint &Loc,
+                                        const void* State,
                                         ExplodedNodeImpl* Pred) {
   bool IsNew;
   ExplodedNodeImpl* N = Eng.G->getNodeImpl(Loc, State, &IsNew);