CallInst::CreateMalloc() and CallInst::CreateFree() need to create calls with correct...
authorVictor Hernandez <vhernandez@apple.com>
Fri, 6 Nov 2009 21:43:21 +0000 (21:43 +0000)
committerVictor Hernandez <vhernandez@apple.com>
Fri, 6 Nov 2009 21:43:21 +0000 (21:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86290 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Instructions.cpp

index 52d8735d89b7ab34b45d3ca3e84ffd5f603023cf..3070241ab5e6eddc33fb35f2bb94d54207447b68 100644 (file)
@@ -524,6 +524,7 @@ static Instruction *createMalloc(Instruction *InsertBefore,
     }
   }
   MCall->setTailCall();
+  MCall->setCallingConv(MallocF->getCallingConv());
   assert(MCall->getType() != Type::getVoidTy(BB->getContext()) &&
          "Malloc has void return type");
 
@@ -572,8 +573,8 @@ static Instruction* createFree(Value* Source, Instruction *InsertBefore,
   const Type *VoidTy = Type::getVoidTy(M->getContext());
   const Type *IntPtrTy = Type::getInt8PtrTy(M->getContext());
   // prototype free as "void free(void*)"
-  Constant *FreeFunc = M->getOrInsertFunction("free", VoidTy, IntPtrTy, NULL);
-
+  Function *FreeFunc = cast<Function>(M->getOrInsertFunction("free", VoidTy,
+                                                             IntPtrTy, NULL));
   CallInst* Result = NULL;
   Value *PtrCast = Source;
   if (InsertBefore) {
@@ -586,6 +587,7 @@ static Instruction* createFree(Value* Source, Instruction *InsertBefore,
     Result = CallInst::Create(FreeFunc, PtrCast, "");
   }
   Result->setTailCall();
+  Result->setCallingConv(FreeFunc->getCallingConv());
 
   return Result;
 }