[cfe-commits] r55515 - in /cfe/trunk: include/clang/Analysis/PathSensitive/Regions.h lib/Analysis/Regions.cpp
Ted Kremenek
kremenek at apple.com
Thu Aug 28 16:32:43 PDT 2008
Author: kremenek
Date: Thu Aug 28 18:32:43 2008
New Revision: 55515
URL: http://llvm.org/viewvc/llvm-project?rev=55515&view=rev
Log:
Remove Regions.h and Regions.cpp, since we are now using an even more abstract representation of "memory regions" in the static analyzer.
Removed:
cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h
cfe/trunk/lib/Analysis/Regions.cpp
Removed: cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h?rev=55514&view=auto
==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/Regions.h (removed)
@@ -1,183 +0,0 @@
-//==- 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"
-#include "clang/Analysis/PathSensitive/SymbolManager.h"
-
-#ifndef LLVM_CLANG_ANALYSIS_REGIONS_H
-#define LLVM_CLANG_ANALYSIS_REGIONS_H
-
-namespace llvm {
- class APSInt;
-}
-
-namespace clang {
-
-class BasicValueFactory;
-
-
-//===----------------------------------------------------------------------===//
-// Region Extents.
-//===----------------------------------------------------------------------===//
-
-class RegionExtent {
-public:
- enum Kind { Unknown = 0, Int = 0, Sym = 1 };
-
-protected:
- const uintptr_t Raw;
- RegionExtent(uintptr_t raw, Kind k) : Raw(raw | k) {}
- uintptr_t getData() const { return Raw & ~0x1; }
-
-public:
- // Folding-set profiling.
- void Profile(llvm::FoldingSetNodeID& ID) const {
- ID.AddPointer((void*) Raw);
- }
- // Comparing extents.
- bool operator==(const RegionExtent& R) const {
- return Raw == R.Raw;
- }
- bool operator!=(const RegionExtent& R) const {
- return Raw != R.Raw;
- }
- // Implement isa<T> support.
- Kind getKind() const { return Kind(Raw & 0x1); }
- uintptr_t getRaw() const { return Raw; }
-
- static inline bool classof(const RegionExtent*) {
- return true;
- }
-};
-
-class UnknownExtent : public RegionExtent {
-public:
- UnknownExtent() : RegionExtent(0,Unknown) {}
-
- // Implement isa<T> support.
- static inline bool classof(const RegionExtent* E) {
- return E->getRaw() == 0;
- }
-};
-
-class IntExtent : public RegionExtent {
-public:
- IntExtent(const llvm::APSInt& X) : RegionExtent((uintptr_t) &X, Int) {}
-
- const llvm::APSInt& getInt() const {
- return *((llvm::APSInt*) getData());
- }
-
- // Implement isa<T> support.
- static inline bool classof(const RegionExtent* E) {
- return E->getKind() == Int && E->getRaw() != 0;
- }
-};
-
-class SymExtent : public RegionExtent {
-public:
- SymExtent(SymbolID S) : RegionExtent(S.getNumber() << 1, Sym) {}
-
- SymbolID getSymbol() const { return SymbolID(getData() >> 1); }
-
- // Implement isa<T> support.
- static inline bool classof(const RegionExtent* E) {
- return E->getKind() == Sym;
- }
-};
-
-//===----------------------------------------------------------------------===//
-// Regions.
-//===----------------------------------------------------------------------===//
-
-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(); }
-
- RegionExtent getExtent(BasicValueFactory& BV) const;
-
- // 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
Removed: cfe/trunk/lib/Analysis/Regions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/Regions.cpp?rev=55514&view=auto
==============================================================================
--- cfe/trunk/lib/Analysis/Regions.cpp (original)
+++ cfe/trunk/lib/Analysis/Regions.cpp (removed)
@@ -1,34 +0,0 @@
-//==- Regions.cpp - 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 "clang/Analysis/PathSensitive/Regions.h"
-#include "clang/Analysis/PathSensitive/BasicValueFactory.h"
-#include "clang/AST/ASTContext.h"
-
-using namespace clang;
-
-RegionExtent VarRegion::getExtent(BasicValueFactory& BV) const {
- QualType T = getDecl()->getType();
-
- // FIXME: Add support for VLAs. This may require passing in additional
- // information, or tracking a different region type.
- if (!T.getTypePtr()->isConstantSizeType())
- return UnknownExtent();
-
- ASTContext& C = BV.getContext();
- assert (!T->isObjCInterfaceType()); // @interface not a possible VarDecl type.
- assert (T != C.VoidTy); // void not a possible VarDecl type.
- return IntExtent(BV.getValue(C.getTypeSize(T), C.VoidPtrTy));
-}
-
More information about the cfe-commits
mailing list