diff --git a/clang/Analysis/ValueState.h b/clang/Analysis/ValueState.h index b452979e2ee2ac3fb76554fa83b96cc97ed73eb5..1067531f5bbe637a9a3a6b191b4bfdea8163cbe4 100644 --- a/clang/Analysis/ValueState.h +++ b/clang/Analysis/ValueState.h @@ -125,7 +125,11 @@ namespace vstate { /// for a "state" in our symbolic value tracking. It is intended to be /// used as a functional object; that is once it is created and made /// "persistent" in a FoldingSet its values will never change. -struct ValueStateImpl : public llvm::FoldingSetNode { +class ValueStateImpl : public llvm::FoldingSetNode { +private: + void operator=(const ValueStateImpl& R) const; + +public: vstate::VariableBindingsTy VariableBindings; vstate::ConstantNotEqTy ConstantNotEq; vstate::ConstantEqTy ConstantEq; @@ -144,6 +148,8 @@ struct ValueStateImpl : public llvm::FoldingSetNode { ConstantNotEq(RHS.ConstantNotEq), ConstantEq(RHS.ConstantEq) {} + + /// Profile - Profile the contents of a ValueStateImpl object for use /// in a FoldingSet. static void Profile(llvm::FoldingSetNodeID& ID, const ValueStateImpl& V) { @@ -167,12 +173,11 @@ struct ValueStateImpl : public llvm::FoldingSetNode { /// void* when being handled by GREngine. It also forces us to unique states; /// consequently, a ValueStateImpl* with a specific address will always refer /// to the unique state with those values. -class ValueState : public llvm::FoldingSetNode { +class ValueState { ValueStateImpl* Data; public: ValueState(ValueStateImpl* D) : Data(D) {} - ValueState() : Data(0) {} - void operator=(ValueStateImpl* D) { Data = D; } + ValueState() : Data(0) {} // Accessors. ValueStateImpl* getImpl() const { return Data; }