forked from OSchip/llvm-project
Add clang.arc.used to ModuleHasARC so ARC always runs if said call is present in a module.
clang.arc.used is an interesting call for ARC since ObjCARCContract needs to run to remove said intrinsic to avoid a linker error (since the call does not exist). llvm-svn: 178369
This commit is contained in:
parent
add82b3c75
commit
3b8f877860
|
@ -64,7 +64,8 @@ static inline bool ModuleHasARC(const Module &M) {
|
|||
M.getNamedValue("objc_copyWeak") ||
|
||||
M.getNamedValue("objc_retainedObject") ||
|
||||
M.getNamedValue("objc_unretainedObject") ||
|
||||
M.getNamedValue("objc_unretainedPointer");
|
||||
M.getNamedValue("objc_unretainedPointer") ||
|
||||
M.getNamedValue("clang.arc.use");
|
||||
}
|
||||
|
||||
/// \enum InstructionClass
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: opt -objc-arc-contract -S < %s | FileCheck %s
|
||||
|
||||
; This file makes sure that clang.arc.used is removed even if no other ARC
|
||||
; interesting calls are in the module.
|
||||
|
||||
declare void @clang.arc.use(...) nounwind
|
||||
|
||||
; Kill calls to @clang.arc.use(...)
|
||||
; CHECK: define void @test0(
|
||||
; CHECK-NOT: clang.arc.use
|
||||
; CHECK: }
|
||||
define void @test0(i8* %a, i8* %b) {
|
||||
call void (...)* @clang.arc.use(i8* %a, i8* %b) nounwind
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue