[cfe-commits] r76791 - /cfe/trunk/include/clang/Analysis/ProgramPoint.h

Ted Kremenek kremenek at apple.com
Wed Jul 22 14:39:25 PDT 2009


Author: kremenek
Date: Wed Jul 22 16:39:25 2009
New Revision: 76791

URL: http://llvm.org/viewvc/llvm-project?rev=76791&view=rev
Log:
Add 'PreStmt' program point. This will be used to represent checking for
preconditions (in GRExprEngine) before the statement itself is evaluated.

Modified:
    cfe/trunk/include/clang/Analysis/ProgramPoint.h

Modified: cfe/trunk/include/clang/Analysis/ProgramPoint.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/ProgramPoint.h?rev=76791&r1=76790&r2=76791&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/ProgramPoint.h (original)
+++ cfe/trunk/include/clang/Analysis/ProgramPoint.h Wed Jul 22 16:39:25 2009
@@ -27,20 +27,21 @@
     
 class ProgramPoint {
 public:
-  enum Kind { BlockEdgeKind = 0x0,
-              BlockEntranceKind = 0x1,
-              BlockExitKind = 0x2, 
-              // Keep the following four together and in this order.
-              PostStmtKind = 0x3,
-              PostLocationChecksSucceedKind = 0x4,
-              PostOutOfBoundsCheckFailedKind = 0x5,
-              PostNullCheckFailedKind = 0x6,
-              PostUndefLocationCheckFailedKind = 0x7,
-              PostLoadKind = 0x8,
-              PostStoreKind = 0x9,
-              PostPurgeDeadSymbolsKind = 0x10,
-              PostStmtCustomKind = 0x11,
-              PostLValueKind = 0x12,
+  enum Kind { BlockEdgeKind,
+              BlockEntranceKind,
+              BlockExitKind,
+              PreStmtKind,
+              // Keep the following together and in this order.
+              PostStmtKind,
+              PostLocationChecksSucceedKind,
+              PostOutOfBoundsCheckFailedKind,
+              PostNullCheckFailedKind,
+              PostUndefLocationCheckFailedKind,
+              PostLoadKind,
+              PostStoreKind,
+              PostPurgeDeadSymbolsKind,
+              PostStmtCustomKind,
+              PostLValueKind,
               MinPostStmtKind = PostStmtKind,
               MaxPostStmtKind = PostLValueKind };
 
@@ -130,9 +131,25 @@
   }
 };
 
+class PreStmt : public ProgramPoint {
+public:
+  PreStmt(const Stmt *S, const void *tag, const Stmt *SubStmt = 0)
+    : ProgramPoint(S, SubStmt, PreStmtKind, tag) {}
+
+  const Stmt *getStmt() const { return (const Stmt*) getData1(); }
+  const Stmt *getSubStmt() const { return (const Stmt*) getData2(); }  
+
+  template <typename T>
+  const T* getStmtAs() const { return llvm::dyn_cast<T>(getStmt()); }
+    
+  static bool classof(const ProgramPoint* Location) {
+    return Location->getKind() == PreStmtKind;
+  }
+};
+
 class PostStmt : public ProgramPoint {
 protected:
-  PostStmt(const Stmt* S, Kind k,const void *tag = 0)
+  PostStmt(const Stmt* S, Kind k, const void *tag = 0)
     : ProgramPoint(S, k, tag) {}
 
   PostStmt(const Stmt* S, const void* data, Kind k, const void *tag =0)





More information about the cfe-commits mailing list