Avoid memory leakage by having caller construct the APInt for the
authorReid Spencer <rspencer@reidspencer.com>
Sat, 3 Mar 2007 08:36:29 +0000 (08:36 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Sat, 3 Mar 2007 08:36:29 +0000 (08:36 +0000)
destination value of LoadValueFromMemory.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34883 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/ExecutionEngine.cpp

index 55793219bcfe5c1fbd2a4f0a3ff5b938a00b7551..ca077fcef057de809320f1136a51d94bfba2f359 100644 (file)
@@ -578,9 +578,9 @@ Store4BytesLittleEndian:
 
 /// FIXME: document
 ///
-GenericValue ExecutionEngine::LoadValueFromMemory(GenericValue *Ptr,
+void ExecutionEngine::LoadValueFromMemory(GenericValue &Result, 
+                                                  GenericValue *Ptr,
                                                   const Type *Ty) {
-  GenericValue Result;
   if (getTargetData()->isLittleEndian()) {
     switch (Ty->getTypeID()) {
     case Type::IntegerTyID: {
@@ -605,7 +605,7 @@ GenericValue ExecutionEngine::LoadValueFromMemory(GenericValue *Ptr,
                           ((uint64_t)Ptr->Untyped[6] << 48) |
                           ((uint64_t)Ptr->Untyped[7] << 56);
       } else
-        Result.APIntVal = new APInt(BitWidth, BitWidth/64, (uint64_t*)Ptr);
+        *(Result.APIntVal) = APInt(BitWidth, BitWidth/64, (uint64_t*)Ptr);
       break;
     }
     Load4BytesLittleEndian:
@@ -657,7 +657,7 @@ GenericValue ExecutionEngine::LoadValueFromMemory(GenericValue *Ptr,
                           ((uint64_t)Ptr->Untyped[1] << 48) |
                           ((uint64_t)Ptr->Untyped[0] << 56);
       } else
-        Result.APIntVal = new APInt(BitWidth, BitWidth/64, (uint64_t*)Ptr);
+        *(Result.APIntVal) = APInt(BitWidth, BitWidth/64, (uint64_t*)Ptr);
       break;
     }
     Load4BytesBigEndian:
@@ -686,7 +686,6 @@ GenericValue ExecutionEngine::LoadValueFromMemory(GenericValue *Ptr,
       abort();
     }
   }
-  return Result;
 }
 
 // InitializeMemory - Recursive function to apply a Constant value into the