mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
37eaf65cb9
Summary: This fixes PR35241. When using byval, the data is effectively copied as part of the call anyway, so the pointer returned by the alloca will not be leaked to the callee and thus there is no reason to issue a warning. Reviewers: rnk Reviewed By: rnk Subscribers: Ka-Ka, llvm-commits Differential Revision: https://reviews.llvm.org/D40009 llvm-svn: 318279
34 lines
796 B
LLVM
34 lines
796 B
LLVM
; RUN: opt < %s -lint -disable-output 2>&1 | FileCheck %s
|
|
|
|
%s = type { i8 }
|
|
|
|
declare void @f1(%s*)
|
|
|
|
define void @f2() {
|
|
entry:
|
|
%c = alloca %s
|
|
tail call void @f1(%s* %c)
|
|
ret void
|
|
}
|
|
|
|
; Lint should complain about the tail call passing the alloca'd value %c to f1.
|
|
; CHECK: Undefined behavior: Call with "tail" keyword references alloca
|
|
; CHECK-NEXT: tail call void @f1(%s* %c)
|
|
|
|
declare void @f3(%s* byval)
|
|
|
|
define void @f4() {
|
|
entry:
|
|
%c = alloca %s
|
|
tail call void @f3(%s* byval %c)
|
|
ret void
|
|
}
|
|
|
|
; Lint should not complain about passing the alloca'd %c since it's passed
|
|
; byval, effectively copying the data to the stack instead of leaking the
|
|
; pointer itself.
|
|
; CHECK-NOT: Undefined behavior: Call with "tail" keyword references alloca
|
|
; CHECK-NOT: tail call void @f3(%s* byval %c)
|
|
|
|
|