// users of the unknown type, causing them to reference a new, more concrete
// type. Opaque types are deleted when their use list dwindles to zero users.
//
-// Opaque types are considered to be first-class types.
-//
//===----------------------------------------------------------------------===//
#ifndef LLVM_TYPE_H
inline bool isDerivedType() const { return ID >= FirstDerivedTyID; }
/// isFirstClassType - Return true if the value is holdable in a register.
+ ///
inline bool isFirstClassType() const {
return (ID != VoidTyID && ID <= LastPrimitiveTyID) ||
- ID == PointerTyID || ID == PackedTyID || ID == OpaqueTyID;
+ ID == PointerTyID || ID == PackedTyID;
}
/// isSized - Return true if it makes sense to take the size of this type. To
/// getNumContainedTypes - Return the number of types in the derived type.
///
- unsigned getNumContainedTypes() const { return ContainedTys.size(); }
+ typedef std::vector<PATypeHandle>::size_type size_type;
+ size_type getNumContainedTypes() const { return ContainedTys.size(); }
//===--------------------------------------------------------------------===//
// Static members exported by the Type class itself. Useful for getting
}
void dropRef() const {
- assert(isAbstract() && "Cannot drop a refernce to a non-abstract type!");
+ assert(isAbstract() && "Cannot drop a reference to a non-abstract type!");
assert(RefCount && "No objects are currently referencing this object!");
// If this is the last PATypeHolder using this object, and there are no
if (--RefCount == 0)
RefCountIsZero();
}
+
+ /// clearAllTypeMaps - This method frees all internal memory used by the
+ /// type subsystem, which can be used in environments where this memory is
+ /// otherwise reported as a leak.
+ static void clearAllTypeMaps();
+
private:
/// isSizedDerivedType - Derived types like structures and arrays are sized
/// iff all of the members of the type are sized as well. Since asking for