forked from OSchip/llvm-project
Remove (unused) RegionExtent and subclasses. Extents are now represented easily using SVals.
llvm-svn: 60576
This commit is contained in:
parent
d8242f19f7
commit
e2c86c30d0
|
@ -439,85 +439,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// RegionExtent - Represents the size, or extent, of an abstract memory chunk
|
|
||||||
/// (a region). Sizes are in bits. RegionExtent is essentially a variant with
|
|
||||||
/// three subclasses: UnknownExtent, FixedExtent, and SymbolicExtent.
|
|
||||||
|
|
||||||
class RegionExtent {
|
|
||||||
public:
|
|
||||||
enum Kind { Unknown = 0, Fixed = 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;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// UnknownExtent - Represents a region extent with no available information
|
|
||||||
/// about the size of the region.
|
|
||||||
class UnknownExtent : public RegionExtent {
|
|
||||||
public:
|
|
||||||
UnknownExtent() : RegionExtent(0,Unknown) {}
|
|
||||||
|
|
||||||
// Implement isa<T> support.
|
|
||||||
static inline bool classof(const RegionExtent* E) {
|
|
||||||
return E->getRaw() == 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// FixedExtent - Represents a region extent with a known fixed size.
|
|
||||||
/// Typically FixedExtents are used to represent the size of variables, but
|
|
||||||
/// they can also be used to represent the size of a constant-sized array.
|
|
||||||
class FixedExtent : public RegionExtent {
|
|
||||||
public:
|
|
||||||
FixedExtent(const llvm::APSInt& X) : RegionExtent((uintptr_t) &X, Fixed) {}
|
|
||||||
|
|
||||||
const llvm::APSInt& getInt() const {
|
|
||||||
return *((llvm::APSInt*) getData());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Implement isa<T> support.
|
|
||||||
static inline bool classof(const RegionExtent* E) {
|
|
||||||
return E->getKind() == Fixed && E->getRaw() != 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/// SymbolicExtent - Represents the extent of a region where the extent
|
|
||||||
/// itself is a symbolic value. These extents can be used to represent
|
|
||||||
/// the sizes of dynamically allocated chunks of memory with variable size.
|
|
||||||
class SymbolicExtent : public RegionExtent {
|
|
||||||
public:
|
|
||||||
SymbolicExtent(SymbolRef S) : RegionExtent(S.getNumber() << 1, Sym) {}
|
|
||||||
|
|
||||||
SymbolRef getSymbol() const { return SymbolRef(getData() >> 1); }
|
|
||||||
|
|
||||||
// Implement isa<T> support.
|
|
||||||
static inline bool classof(const RegionExtent* E) {
|
|
||||||
return E->getKind() == Sym;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// MemRegionManager - Factory object for creating regions.
|
// MemRegionManager - Factory object for creating regions.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
Loading…
Reference in New Issue