1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -objc-arc -S < %s | FileCheck %s 3 4declare i8* @llvm.objc.initWeak(i8**, i8*) 5declare i8* @llvm.objc.storeWeak(i8**, i8*) 6declare i8* @llvm.objc.loadWeak(i8**) 7declare void @llvm.objc.destroyWeak(i8**) 8declare i8* @llvm.objc.loadWeakRetained(i8**) 9declare void @llvm.objc.moveWeak(i8**, i8**) 10declare void @llvm.objc.copyWeak(i8**, i8**) 11 12; If the pointer-to-weak-pointer is null, it's undefined behavior. 13 14define void @test0(i8* %p, i8** %q) { 15; CHECK-LABEL: @test0( 16; CHECK-NEXT: entry: 17; CHECK-NEXT: store i1 true, i1* undef, align 1 18; CHECK-NEXT: store i1 true, i1* undef, align 1 19; CHECK-NEXT: store i1 true, i1* undef, align 1 20; CHECK-NEXT: store i1 true, i1* undef, align 1 21; CHECK-NEXT: store i1 true, i1* undef, align 1 22; CHECK-NEXT: store i1 true, i1* undef, align 1 23; CHECK-NEXT: store i1 true, i1* undef, align 1 24; CHECK-NEXT: store i1 true, i1* undef, align 1 25; CHECK-NEXT: store i1 true, i1* undef, align 1 26; CHECK-NEXT: store i1 true, i1* undef, align 1 27; CHECK-NEXT: store i1 true, i1* undef, align 1 28; CHECK-NEXT: store i1 true, i1* undef, align 1 29; CHECK-NEXT: store i1 true, i1* undef, align 1 30; CHECK-NEXT: store i1 true, i1* undef, align 1 31; CHECK-NEXT: store i1 true, i1* undef, align 1 32; CHECK-NEXT: store i1 true, i1* undef, align 1 33; CHECK-NEXT: store i1 true, i1* undef, align 1 34; CHECK-NEXT: store i1 true, i1* undef, align 1 35; CHECK-NEXT: ret void 36; 37entry: 38 call i8* @llvm.objc.storeWeak(i8** null, i8* %p) 39 call i8* @llvm.objc.storeWeak(i8** undef, i8* %p) 40 call i8* @llvm.objc.loadWeakRetained(i8** null) 41 call i8* @llvm.objc.loadWeakRetained(i8** undef) 42 call i8* @llvm.objc.loadWeak(i8** null) 43 call i8* @llvm.objc.loadWeak(i8** undef) 44 call i8* @llvm.objc.initWeak(i8** null, i8* %p) 45 call i8* @llvm.objc.initWeak(i8** undef, i8* %p) 46 call void @llvm.objc.destroyWeak(i8** null) 47 call void @llvm.objc.destroyWeak(i8** undef) 48 49 call void @llvm.objc.copyWeak(i8** null, i8** %q) 50 call void @llvm.objc.copyWeak(i8** undef, i8** %q) 51 call void @llvm.objc.copyWeak(i8** %q, i8** null) 52 call void @llvm.objc.copyWeak(i8** %q, i8** undef) 53 54 call void @llvm.objc.moveWeak(i8** null, i8** %q) 55 call void @llvm.objc.moveWeak(i8** undef, i8** %q) 56 call void @llvm.objc.moveWeak(i8** %q, i8** null) 57 call void @llvm.objc.moveWeak(i8** %q, i8** undef) 58 59 ret void 60} 61