diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-05-16 03:05:33 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-05-16 03:05:33 +0000 |
| commit | 0e00c6c561181be7e9cc75ad2fee9cd4cbbfca1e (patch) | |
| tree | ce64246a87e40887e6b6a022317abfec99e024d1 /test/Transforms | |
| parent | baaa3201681d58434a54f9cedfd600c248dc10e9 (diff) | |
Don't do tail calls in a function that call setjmp. The stack might be
corrupted when setjmp returns again.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131399 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
| -rw-r--r-- | test/Transforms/TailCallElim/setjmp.ll | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/Transforms/TailCallElim/setjmp.ll b/test/Transforms/TailCallElim/setjmp.ll new file mode 100644 index 0000000000..7b7fe56825 --- /dev/null +++ b/test/Transforms/TailCallElim/setjmp.ll @@ -0,0 +1,16 @@ +; RUN: opt < %s -tailcallelim -S | FileCheck %s + +; Test that we don't tail call in a functions that calls setjmp. + +; CHECK-NOT: tail call void @bar() + +define void @foo(i32* %x) { +bb: + %tmp75 = tail call i32 @setjmp(i32* %x) + call void @bar() + ret void +} + +declare i32 @setjmp(i32*) + +declare void @bar() |
