xref: /aosp_15_r20/external/llvm/test/Transforms/ObjCARC/weak.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt -objc-arc -S < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdeclare i8* @objc_initWeak(i8**, i8*)
4*9880d681SAndroid Build Coastguard Workerdeclare i8* @objc_storeWeak(i8**, i8*)
5*9880d681SAndroid Build Coastguard Workerdeclare i8* @objc_loadWeak(i8**)
6*9880d681SAndroid Build Coastguard Workerdeclare void @objc_destroyWeak(i8**)
7*9880d681SAndroid Build Coastguard Workerdeclare i8* @objc_loadWeakRetained(i8**)
8*9880d681SAndroid Build Coastguard Workerdeclare void @objc_moveWeak(i8**, i8**)
9*9880d681SAndroid Build Coastguard Workerdeclare void @objc_copyWeak(i8**, i8**)
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; If the pointer-to-weak-pointer is null, it's undefined behavior.
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @test0(
14*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
15*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
16*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
17*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
18*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
19*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
20*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
21*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
22*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
23*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
24*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
25*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
26*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
27*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
28*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
29*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
30*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
31*9880d681SAndroid Build Coastguard Worker; CHECK: store i8* undef, i8** null
32*9880d681SAndroid Build Coastguard Worker; CHECK: ret void
33*9880d681SAndroid Build Coastguard Workerdefine void @test0(i8* %p, i8** %q) {
34*9880d681SAndroid Build Coastguard Workerentry:
35*9880d681SAndroid Build Coastguard Worker  call i8* @objc_storeWeak(i8** null, i8* %p)
36*9880d681SAndroid Build Coastguard Worker  call i8* @objc_storeWeak(i8** undef, i8* %p)
37*9880d681SAndroid Build Coastguard Worker  call i8* @objc_loadWeakRetained(i8** null)
38*9880d681SAndroid Build Coastguard Worker  call i8* @objc_loadWeakRetained(i8** undef)
39*9880d681SAndroid Build Coastguard Worker  call i8* @objc_loadWeak(i8** null)
40*9880d681SAndroid Build Coastguard Worker  call i8* @objc_loadWeak(i8** undef)
41*9880d681SAndroid Build Coastguard Worker  call i8* @objc_initWeak(i8** null, i8* %p)
42*9880d681SAndroid Build Coastguard Worker  call i8* @objc_initWeak(i8** undef, i8* %p)
43*9880d681SAndroid Build Coastguard Worker  call void @objc_destroyWeak(i8** null)
44*9880d681SAndroid Build Coastguard Worker  call void @objc_destroyWeak(i8** undef)
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Worker  call void @objc_copyWeak(i8** null, i8** %q)
47*9880d681SAndroid Build Coastguard Worker  call void @objc_copyWeak(i8** undef, i8** %q)
48*9880d681SAndroid Build Coastguard Worker  call void @objc_copyWeak(i8** %q, i8** null)
49*9880d681SAndroid Build Coastguard Worker  call void @objc_copyWeak(i8** %q, i8** undef)
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker  call void @objc_moveWeak(i8** null, i8** %q)
52*9880d681SAndroid Build Coastguard Worker  call void @objc_moveWeak(i8** undef, i8** %q)
53*9880d681SAndroid Build Coastguard Worker  call void @objc_moveWeak(i8** %q, i8** null)
54*9880d681SAndroid Build Coastguard Worker  call void @objc_moveWeak(i8** %q, i8** undef)
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker  ret void
57*9880d681SAndroid Build Coastguard Worker}
58