Simplify User::operator delete().
authorJay Foad <jay.foad@gmail.com>
Wed, 26 Jan 2011 21:56:10 +0000 (21:56 +0000)
committerJay Foad <jay.foad@gmail.com>
Wed, 26 Jan 2011 21:56:10 +0000 (21:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124330 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/User.h
lib/VMCore/User.cpp

index 2aca78c41a64c07423508888028486b2f95f0f5d..1363495f7c07c230c756461b30e244b9fe7983aa 100644 (file)
@@ -53,6 +53,7 @@ protected:
   void dropHungoffUses() {
     Use::zap(OperandList, OperandList + NumOperands, true);
     OperandList = 0;
+    // Reset NumOperands so User::operator delete() does the right thing.
     NumOperands = 0;
   }
 public:
index ba2b2081db57ebf460aec5fe270514e957b9fd37..2f4587debb662b61d85015b21f7824374fbf1466 100644 (file)
@@ -73,16 +73,9 @@ void *User::operator new(size_t s, unsigned Us) {
 void User::operator delete(void *Usr) {
   User *Start = static_cast<User*>(Usr);
   Use *Storage = static_cast<Use*>(Usr) - Start->NumOperands;
-  //
-  // look for a variadic User
-  if (Storage == Start->OperandList) {
-    ::operator delete(Storage);
-    return;
-  }
-  //
-  // in all other cases just delete the nullary User (covers hung-off
-  // uses also
-  ::operator delete(Usr);
+  // If there were hung-off uses, they will have been freed already and
+  // NumOperands reset to 0, so here we just free the User itself.
+  ::operator delete(Storage);
 }
 
 } // End llvm namespace