diff options
Diffstat (limited to 'test/Transforms/ObjCARC/basic.ll')
-rw-r--r-- | test/Transforms/ObjCARC/basic.ll | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/test/Transforms/ObjCARC/basic.ll b/test/Transforms/ObjCARC/basic.ll index fc1d087794d62..c10c3b1381b7b 100644 --- a/test/Transforms/ObjCARC/basic.ll +++ b/test/Transforms/ObjCARC/basic.ll @@ -4,6 +4,7 @@ target datalayout = "e-p:64:64:64" declare i8* @objc_retain(i8*) declare i8* @objc_retainAutoreleasedReturnValue(i8*) +declare i8* @objc_unsafeClaimAutoreleasedReturnValue(i8*) declare void @objc_release(i8*) declare i8* @objc_autorelease(i8*) declare i8* @objc_autoreleaseReturnValue(i8*) @@ -2573,6 +2574,27 @@ return: ; preds = %if.then, %entry ret i8* %retval } +; CHECK-LABEL: define i8* @test65d( +; CHECK: if.then: +; CHECK-NOT: @objc_autorelease +; CHECK: return: +; CHECK: call i8* @objc_autoreleaseReturnValue( +; CHECK: } +define i8* @test65d(i1 %x) { +entry: + br i1 %x, label %return, label %if.then + +if.then: ; preds = %entry + %c = call i8* @returner() + %s = call i8* @objc_unsafeClaimAutoreleasedReturnValue(i8* %c) nounwind + br label %return + +return: ; preds = %if.then, %entry + %retval = phi i8* [ %s, %if.then ], [ null, %entry ] + %q = call i8* @objc_autoreleaseReturnValue(i8* %retval) nounwind + ret i8* %retval +} + ; An objc_retain can serve as a may-use for a different pointer. ; rdar://11931823 @@ -3015,10 +3037,17 @@ define void @test67(i8* %x) { } !llvm.module.flags = !{!1} +!llvm.dbg.cu = !{!3} !0 = !{} !1 = !{i32 1, !"Debug Info Version", i32 3} -!2 = distinct !DISubprogram() +!2 = distinct !DISubprogram(unit: !3) +!3 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang", + file: !4, + isOptimized: true, flags: "-O2", + splitDebugFilename: "abc.debug", emissionKind: 2) +!4 = !DIFile(filename: "path/to/file", directory: "/path/to/dir") +!5 = !{i32 2, !"Debug Info Version", i32 3} ; CHECK: attributes #0 = { nounwind readnone } ; CHECK: attributes [[NUW]] = { nounwind } |