Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / Analysis / Lint / tail-call-byval.ll
blobf82df2f44f83e84eea1cf5d6dc2660378ef49c62
1 ; RUN: opt < %s -passes=lint -disable-output 2>&1 | FileCheck %s
3 %s = type { i8 }
5 declare void @f1(ptr)
7 define void @f2() {
8 entry:
9   %c = alloca %s
10   tail call void @f1(ptr %c)
11   ret void
14 ; Lint should complain about the tail call passing the alloca'd value %c to f1.
15 ; CHECK: Undefined behavior: Call with "tail" keyword references alloca
16 ; CHECK-NEXT:  tail call void @f1(ptr %c)
18 declare void @f3(ptr byval(%s))
20 define void @f4() {
21 entry:
22   %c = alloca %s
23   tail call void @f3(ptr byval(%s) %c)
24   ret void
27 ; Lint should not complain about passing the alloca'd %c since it's passed
28 ; byval, effectively copying the data to the stack instead of leaking the
29 ; pointer itself.
30 ; CHECK-NOT: Undefined behavior: Call with "tail" keyword references alloca
31 ; CHECK-NOT:  tail call void @f3(ptr byval(%s) %c)