llvm-project/llvm/test/Bitcode/upgrade-arc-runtime-calls-bitcast.ll
Akira Hatanaka 31b752cbf0 [ObjC][ARC] Check whether the return and parameter types of the old and
new functions are compatible before upgrading a function call to an
intrinsic call.

Sometimes users insert calls to ARC runtime functions that are not
compatible with the corresponding intrinsic functions (for example,
'i8* @objc_storeStrong' instead of 'void @objc_storeStrong'). Don't
upgrade those calls.

rdar://problem/56447127
2019-10-24 13:08:50 -07:00

22 lines
622 B
LLVM

target triple = "arm64-apple-ios7.0"
; RUN: llvm-dis < %S/upgrade-arc-runtime-calls-bitcast.bc | FileCheck %s
; CHECK: tail call i8* @objc_retain(i32 1)
; CHECK: tail call i8* @objc_storeStrong(
define void @testRuntimeCalls(i8* %a, i8** %b) {
%v6 = tail call i8* @objc_retain(i32 1)
%1 = tail call i8* @objc_storeStrong(i8** %b, i8* %a)
ret void
}
declare i8* @objc_retain(i32)
declare i8* @objc_storeStrong(i8**, i8*)
attributes #0 = { nounwind }
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"clang.arc.retainAutoreleasedReturnValueMarker", !"mov\09fp, fp\09\09; marker for objc_retainAutoreleaseReturnValue"}