-Value::Value(const Type *ty, ValueTy vty, const std::string &name)
- : Name(name), Ty(checkType(ty)) {
- VTy = vty;
+Value::Value(const Type *ty, unsigned scid, const std::string &name)
+ : SubclassID(scid), Ty(checkType(ty)), Name(name) {
+ if (!isa<Constant>(this) && !isa<BasicBlock>(this))
+ assert((Ty->isFirstClassType() || Ty == Type::VoidTy ||
+ isa<OpaqueType>(ty)) &&
+ "Cannot create non-first-class values except for constants!");
+ if (ty == Type::VoidTy)
+ assert(name.empty() && "Cannot have named void values!");