mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-25 21:45:21 +00:00
SimplifyLibCalls: Fix crash on memset(notmalloc())
rdar://31520787 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301352 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6ec3ecc68b
commit
953d6af0d1
@ -842,6 +842,9 @@ static Value *foldMallocMemset(CallInst *Memset, IRBuilder<> &B,
|
||||
|
||||
// Is the inner call really malloc()?
|
||||
Function *InnerCallee = Malloc->getCalledFunction();
|
||||
if (!InnerCallee)
|
||||
return nullptr;
|
||||
|
||||
LibFunc Func;
|
||||
if (!TLI.getLibFunc(*InnerCallee, Func) || !TLI.has(Func) ||
|
||||
Func != LibFunc_malloc)
|
||||
|
@ -26,6 +26,15 @@ define i8* @pr25892_lite(i32 %size) #0 {
|
||||
; CHECK-NEXT: ret i8* %calloc
|
||||
}
|
||||
|
||||
; This should not create a calloc and not crash the compiler.
|
||||
; CHECK-LABEL: @notmalloc_memset
|
||||
; CHECK-NOT: @calloc
|
||||
define i8* @notmalloc_memset(i32 %size, i8*(i32)* %notmalloc) {
|
||||
%call1 = call i8* %notmalloc(i32 %size) #1
|
||||
%call2 = call i8* @memset(i8* %call1, i32 0, i32 %size) #1
|
||||
ret i8* %call2
|
||||
}
|
||||
|
||||
; FIXME: memset(malloc(x), 0, x) -> calloc(1, x)
|
||||
; This doesn't fire currently because the malloc has more than one use.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user