mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-20 14:29:27 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83324 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
aa5c1b7f93
commit
85c005af0d
@ -34,12 +34,23 @@ static bool isMallocCall(const CallInst *CI) {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
const Module* M = CI->getParent()->getParent()->getParent();
|
const Module* M = CI->getParent()->getParent()->getParent();
|
||||||
Constant *MallocFunc = M->getFunction("malloc");
|
Function *MallocFunc = M->getFunction("malloc");
|
||||||
|
|
||||||
if (CI->getOperand(0) != MallocFunc)
|
if (CI->getOperand(0) != MallocFunc)
|
||||||
return false;
|
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
|
/// extractMallocCall - Returns the corresponding CallInst if the instruction
|
||||||
|
Loading…
x
Reference in New Issue
Block a user