Do not raise free() call that is called through invoke instruction.

llvm-svn: 43083
This commit is contained in:
Devang Patel 2007-10-17 20:12:58 +00:00
parent a3f1336e39
commit b3dac3f5d9
2 changed files with 19 additions and 0 deletions

View File

@ -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 ||

View File

@ -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(...)