forked from OSchip/llvm-project
Do not raise free() call that is called through invoke instruction.
llvm-svn: 43083
This commit is contained in:
parent
a3f1336e39
commit
b3dac3f5d9
|
@ -204,6 +204,8 @@ bool RaiseAllocations::runOnModule(Module &M) {
|
|||
Users.pop_back();
|
||||
|
||||
if (Instruction *I = dyn_cast<Instruction>(U)) {
|
||||
if (isa<InvokeInst>(I))
|
||||
continue;
|
||||
CallSite CS = CallSite::get(I);
|
||||
if (CS.getInstruction() && !CS.arg_empty() &&
|
||||
(CS.getCalledFunction() == FreeFunc ||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
; RUN: llvm-as <%s | opt -raiseallocs -stats -disable-output |& \
|
||||
; RUN: not grep {Number of allocations raised}
|
||||
define void @foo() {
|
||||
entry:
|
||||
%buffer = alloca i16*
|
||||
%tmp = load i16** %buffer, align 8
|
||||
invoke i32(...)* @free(i16* %tmp)
|
||||
to label %invcont unwind label %unwind
|
||||
invcont:
|
||||
br label %finally
|
||||
unwind:
|
||||
br label %finally
|
||||
finally:
|
||||
ret void
|
||||
}
|
||||
declare i32 @free(...)
|
||||
|
Loading…
Reference in New Issue