Avoid memory leakage by having caller construct the APInt for the
destination value of LoadValueFromMemory.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34883 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp
index 5579321..ca077fc 100644
--- a/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -578,9 +578,9 @@
 
 /// 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 @@
                           ((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 @@
                           ((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 @@
       abort();
     }
   }
-  return Result;
 }
 
 // InitializeMemory - Recursive function to apply a Constant value into the