Validate the return type when checking if a function is malloc.
authorBenjamin Kramer <benny.kra@googlemail.com>
Wed, 23 Nov 2011 17:58:47 +0000 (17:58 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Wed, 23 Nov 2011 17:58:47 +0000 (17:58 +0000)
Fixes PR11426. Not sure if a test case with a "wrong" malloc would be useful.

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

lib/Analysis/MemoryBuiltins.cpp

index 8d451c46f9b068bd573ba206bcee9dd193ee7b78..b145650b0f0a32d4ba7c361c55667ce34fed4d38 100644 (file)
@@ -48,10 +48,10 @@ static bool isMallocCall(const CallInst *CI) {
   // FIXME: workaround for PR5130, this will be obsolete when a nobuiltin 
   // attribute will exist.
   FunctionType *FTy = Callee->getFunctionType();
-  if (FTy->getNumParams() != 1)
-    return false;
-  return FTy->getParamType(0)->isIntegerTy(32) ||
-         FTy->getParamType(0)->isIntegerTy(64);
+  return FTy->getReturnType() == Type::getInt8PtrTy(FTy->getContext()) &&
+         FTy->getNumParams() == 1 &&
+         (FTy->getParamType(0)->isIntegerTy(32) ||
+          FTy->getParamType(0)->isIntegerTy(64));
 }
 
 /// extractMallocCall - Returns the corresponding CallInst if the instruction