diff --git a/include/llvm/Use.h b/include/llvm/Use.h index 88b723bfc3a..8f2939406bb 100644 --- a/include/llvm/Use.h +++ b/include/llvm/Use.h @@ -37,10 +37,17 @@ class Use { Use *Prev, *Next; friend struct ilist_traits; public: - inline Use(Value *v, User *user); - inline Use(const Use &u); + inline void init(Value *V, User *U); + + Use(Value *V, User *U) { init(V, U); } + Use(const Use &U) { init(U.Val, U.U); } inline ~Use(); + /// Default ctor - This leaves the Use completely unitialized. The only thing + /// that is valid to do with this use is to call the "init" method. + inline Use() : Val(0) {} + + operator Value*() const { return Val; } Value *get() const { return Val; } User *getUser() const { return U; } diff --git a/include/llvm/Value.h b/include/llvm/Value.h index 2e618a5e863..90bbe6fe91c 100644 --- a/include/llvm/Value.h +++ b/include/llvm/Value.h @@ -41,7 +41,6 @@ class SymbolTable; /// as operands to other values. /// class Value { -private: unsigned SubclassID; // Subclass identifier (for isa/dyn_cast) PATypeHolder Ty; iplist Uses; @@ -168,11 +167,9 @@ inline const User *UseListConstIteratorWrapper::operator*() const { } -Use::Use(Value *v, User *user) : Val(v), U(user) { - if (Val) Val->addUse(*this); -} - -Use::Use(const Use &u) : Val(u.Val), U(u.U) { +void Use::init(Value *v, User *user) { + Val = v; + U = user; if (Val) Val->addUse(*this); }