[cfe-commits] r55211 - in /cfe/trunk/include/clang/Analysis/PathSensitive: Regions.h Store.h
Ted Kremenek
kremenek at apple.com
Fri Aug 22 17:43:24 PDT 2008
Author: kremenek
Date: Fri Aug 22 19:43:24 2008
New Revision: 55211
URL: http://llvm.org/viewvc/llvm-project?rev=55211&view=rev
Log:
Added Regions.h: Regions define abstract memory locations for the static analyzer.
Added:
cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h
Modified:
cfe/trunk/include/clang/Analysis/PathSensitive/Store.h
Added: cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h?rev=55211&view=auto
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h (added)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h Fri Aug 22 19:43:24 2008
@@ -0,0 +1,99 @@
+//==- Regions.h - Abstract memory locations ------------------------*- C++ -*-//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines Region and its subclasses. Regions represent abstract
+// memory locations.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/DataTypes.h"
+#include "llvm/Support/Casting.h"
+#include "llvm/ADT/FoldingSet.h"
+
+#ifndef LLVM_CLANG_ANALYSIS_REGIONS_H
+#define LLVM_CLANG_ANALYSIS_REGIONS_H
+
+namespace clang {
+
+class Region {
+public:
+ enum Kind { Var = 0x0, Anon = 0x1 };
+
+private:
+ uintptr_t Raw;
+
+protected:
+ Region(const void* data, Kind kind)
+ : Raw((uintptr_t) data | (uintptr_t) kind) {
+ assert ((reinterpret_cast<uintptr_t>(const_cast<void*>(data)) & 0x1) == 0
+ && "Address must have at least a 2-byte alignment.");
+ }
+
+ const void* getData() const { return (const void*) (Raw & ~0x1); }
+
+public:
+ // Folding-set profiling.
+ void Profile(llvm::FoldingSetNodeID& ID) const { ID.AddPointer((void*) Raw); }
+
+ // Comparing regions.
+ bool operator==(const Region& R) const { return Raw == R.Raw; }
+ bool operator!=(const Region& R) const { return Raw != R.Raw; }
+
+ // Implement isa<T> support.
+ Kind getKind() const { return Kind (Raw & 0x1); }
+ static inline bool classof(const Region*) { return true; }
+};
+
+//===----------------------------------------------------------------------===//
+// Region Types.
+//===----------------------------------------------------------------------===//
+
+class VarRegion : public Region {
+public:
+ VarRegion(VarDecl* VD) : Region(VD, Region::Var) {}
+
+ /// getDecl - Return the declaration of the variable the region represents.
+ const VarDecl* getDecl() const { return (const VarDecl*) getData(); }
+ operator const VarDecl*() const { return getDecl(); }
+
+ // Implement isa<T> support.
+ static inline bool classof(const Region* R) {
+ return R->getKind() == Region::Var;
+ }
+
+ static inline bool classof(const VarRegion*) {
+ return true;
+ }
+};
+
+class AnonRegion : public Region {
+protected:
+ friend class Region;
+
+ AnonRegion(uintptr_t RegionID) : Region((void*) (RegionID<<1), Region::Anon) {
+ assert (((RegionID << 1) >> 1) == RegionID);
+ }
+
+public:
+
+ uintptr_t getID() const { return ((uintptr_t) getData()) >> 1; }
+
+ // Implement isa<T> support.
+ static inline bool classof(const Region* R) {
+ return R->getKind() == Region::Anon;
+ }
+
+ static inline bool classof(const AnonRegion*) {
+ return true;
+ }
+};
+
+} // end clang namespace
+
+#endif
Modified: cfe/trunk/include/clang/Analysis/PathSensitive/Store.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/Store.h?rev=55211&r1=55210&r2=55211&view=diff
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/Store.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/Store.h Fri Aug 22 19:43:24 2008
@@ -15,6 +15,7 @@
#define LLVM_CLANG_ANALYSIS_STORE_H
#include "clang/Analysis/PathSensitive/RValues.h"
+#include "clang/Analysis/PathSensitive/Regions.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/DenseSet.h"
More information about the cfe-commits
mailing list