}
Type(TypeKind K) : Kind(K) {}
virtual unsigned getSizeInBits() const = 0;
- virtual ~Type() {}
+ virtual ~Type();
};
+// Provide out-of-line definition to prevent weak vtable.
+Type::~Type() {}
+
}
+namespace {
class ExtendedIntegerType : public Type {
unsigned BitWidth;
public:
: Type(TK_ExtendedIntegerType), BitWidth(bits) {}
static bool classof(const Type *T) {
return T->getKind() == TK_ExtendedIntegerType;
- };
- unsigned getSizeInBits() const {
+ }
+ virtual unsigned getSizeInBits() const {
return getBitWidth();
}
unsigned getBitWidth() const {
: Type(TK_ExtendedVectorType), ElementType(elty), NumElements(num) {}
static bool classof(const Type *T) {
return T->getKind() == TK_ExtendedVectorType;
- };
- unsigned getSizeInBits() const {
+ }
+ virtual unsigned getSizeInBits() const {
return getNumElements() * getElementType().getSizeInBits();
}
EVT getElementType() const {
return NumElements;
}
};
+} // end anonymous namespace
static std::map<unsigned, const Type *>
ExtendedIntegerTypeMap;