[llvm-commits] [llvm] r83324 - /llvm/trunk/lib/Analysis/MallocHelper.cpp
Torok Edwin
edwintorok at gmail.com
Mon Oct 5 14:15:44 PDT 2009
Author: edwin
Date: Mon Oct 5 16:15:43 2009
New Revision: 83324
URL: http://llvm.org/viewvc/llvm-project?rev=83324&view=rev
Log:
Don't treat malloc calls with non-matching prototype as malloc.
Fixes second part of PR5130, miscompilation in FreeBSD kernel, where malloc takes 3 params,
and *does* initialize memory.
Modified:
llvm/trunk/lib/Analysis/MallocHelper.cpp
Modified: llvm/trunk/lib/Analysis/MallocHelper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MallocHelper.cpp?rev=83324&r1=83323&r2=83324&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/MallocHelper.cpp (original)
+++ llvm/trunk/lib/Analysis/MallocHelper.cpp Mon Oct 5 16:15:43 2009
@@ -34,12 +34,23 @@
return false;
const Module* M = CI->getParent()->getParent()->getParent();
- Constant *MallocFunc = M->getFunction("malloc");
+ Function *MallocFunc = M->getFunction("malloc");
if (CI->getOperand(0) != MallocFunc)
return false;
- return true;
+ // Check malloc prototype.
+ // FIXME: this will be obsolete when nobuiltin attribute will exist.
+ const FunctionType *FTy = MallocFunc->getFunctionType();
+ if (FTy->getNumParams() != 1)
+ return false;
+ if (IntegerType *ITy = dyn_cast<IntegerType>(FTy->param_begin()->get())) {
+ if (ITy->getBitWidth() != 32 && ITy->getBitWidth() != 64)
+ return false;
+ return true;
+ }
+
+ return false;
}
/// extractMallocCall - Returns the corresponding CallInst if the instruction
More information about the llvm-commits
mailing list