An stdcall function calling a non-stdcall function

cannot use tailcall.  PR 8461.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117322 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dale Johannesen 2010-10-25 22:17:05 +00:00
parent 87c5c2f069
commit d155d7e428
2 changed files with 18 additions and 0 deletions

View File

@ -2532,6 +2532,11 @@ X86TargetLowering::IsEligibleForTailCallOptimization(SDValue Callee,
}
}
// An stdcall caller is expected to clean up its arguments; the callee
// isn't going to do that. PR 8461.
if (!CCMatch && CallerCC==CallingConv::X86_StdCall)
return false;
return true;
}

View File

@ -0,0 +1,13 @@
; RUN: llc -mtriple=i386-apple-darwin11 -O2 < %s | FileCheck %s
%struct.I = type { i32 (...)** }
define x86_stdcallcc void @bar(%struct.I* nocapture %this) ssp align 2 {
; CHECK: bar:
; CHECK-NOT: jmp
; CHECK: ret $4
entry:
tail call void @foo()
ret void
}
declare void @foo()