Revert 51775.
[oota-llvm.git] / include / llvm / User.h
index 145477915481589d85bfb9b283f0179b35f6808c..23967c7420b81d09dc7f87ef6311b2187cccb631 100644 (file)
@@ -227,18 +227,9 @@ protected:
   ///
   unsigned NumOperands;
 
-  void *operator new(size_t s, unsigned Us) {
-    void *Storage = ::operator new(s + sizeof(Use) * Us);
-    Use *Start = static_cast<Use*>(Storage);
-    Use *End = Start + Us;
-    User *Obj = reinterpret_cast<User*>(End);
-    Obj->OperandList = Start;
-    Obj->NumOperands = Us;
-    Use::initTags(Start, End);
-    return Obj;
-  }
-  User(const Type *Ty, unsigned vty, Use *OpList, unsigned NumOps)
-    : Value(Ty, vty), OperandList(OpList), NumOperands(NumOps) {}
+  void *operator new(size_t s, unsigned Us);
+  User(const Type *ty, unsigned vty, Use *OpList, unsigned NumOps)
+    : Value(ty, vty), OperandList(OpList), NumOperands(NumOps) {}
   Use *allocHungoffUses(unsigned) const;
   void dropHungoffUses(Use *U) {
     if (OperandList == U) {
@@ -251,12 +242,11 @@ public:
   ~User() {
     Use::zap(OperandList, OperandList + NumOperands);
   }
-  void operator delete(void *Usr) {
-    User *Start = static_cast<User*>(Usr);
-    Use *Storage = static_cast<Use*>(Usr) - Start->NumOperands;
-    ::operator delete(Storage == Start->OperandList
-                      ? Storage
-                      : Usr);
+  /// operator delete - free memory allocated for User and Use objects
+  void operator delete(void *Usr);
+  /// placement delete - required by std, but never called.
+  void operator delete(void*, unsigned) {
+    assert(0 && "Constructor throws?");
   }
   template <unsigned Idx> Use &Op() {
     return OperandTraits<User>::op_begin(this)[Idx];