Fifth time's a charm! Remove ourselves as abstract type listeners once we've

been told that the type is no longer abstract.

llvm-svn: 81749
This commit is contained in:
Nick Lewycky 2009-09-14 02:25:19 +00:00
parent d53bac7fa4
commit 22c4a497ab
1 changed files with 16 additions and 3 deletions

View File

@ -107,8 +107,9 @@ PreVer("preverify", "Preliminary module verification");
static const PassInfo *const PreVerifyID = &PreVer;
namespace {
struct TypeSet : public AbstractTypeUser {
SmallSetVector<const Type *, 16> Types;
class TypeSet : public AbstractTypeUser {
public:
TypeSet() {}
/// Insert a type into the set of types.
bool insert(const Type *Ty) {
@ -138,8 +139,20 @@ namespace {
Types.remove(OldTy);
OldTy->removeAbstractTypeUser(this);
}
void typeBecameConcrete(const DerivedType *AbsTy) {}
/// Stop listening for changes to a type which is no longer abstract.
void typeBecameConcrete(const DerivedType *AbsTy) {
AbsTy->removeAbstractTypeUser(this);
}
void dump() const {}
private:
SmallSetVector<const Type *, 16> Types;
// Disallow copying.
TypeSet(const TypeSet &);
TypeSet &operator=(const TypeSet &);
};
struct Verifier : public FunctionPass, public InstVisitor<Verifier> {