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