diff options
Diffstat (limited to 'test/Transforms/ObjCARC')
-rw-r--r-- | test/Transforms/ObjCARC/allocas.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/arc-annotations.ll | 12 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/basic.ll | 10 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/cfg-hazards.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/contract-marker.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/contract-storestrong.ll | 98 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/contract-testcases.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/empty-block.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll | 126 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/escape.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/intrinsic-use.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/invoke.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/nested.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/path-overflow.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/retain-not-declared.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/split-backedge.ll | 2 | ||||
-rw-r--r-- | test/Transforms/ObjCARC/weak-copies.ll | 2 |
17 files changed, 160 insertions, 112 deletions
diff --git a/test/Transforms/ObjCARC/allocas.ll b/test/Transforms/ObjCARC/allocas.ll index d2e7841..7b671df 100644 --- a/test/Transforms/ObjCARC/allocas.ll +++ b/test/Transforms/ObjCARC/allocas.ll @@ -495,6 +495,6 @@ arraydestroy.done1: ret void } -!0 = metadata !{} +!0 = !{} declare i32 @__gxx_personality_v0(...) diff --git a/test/Transforms/ObjCARC/arc-annotations.ll b/test/Transforms/ObjCARC/arc-annotations.ll index f76ba3b..c0ce44f 100644 --- a/test/Transforms/ObjCARC/arc-annotations.ll +++ b/test/Transforms/ObjCARC/arc-annotations.ll @@ -73,11 +73,11 @@ return: ret void } -!0 = metadata !{} +!0 = !{} -; CHECK: ![[ANN0]] = metadata !{metadata !"(test0,%x)", metadata !"S_Use", metadata !"S_None"} -; CHECK: ![[ANN1]] = metadata !{metadata !"(test0,%x)", metadata !"S_None", metadata !"S_Retain"} -; CHECK: ![[ANN2]] = metadata !{metadata !"(test0,%x)", metadata !"S_Release", metadata !"S_Use"} -; CHECK: ![[ANN3]] = metadata !{metadata !"(test0,%x)", metadata !"S_None", metadata !"S_Release"} -; CHECK: ![[ANN4]] = metadata !{metadata !"(test0,%x)", metadata !"S_Retain", metadata !"S_None"} +; CHECK: ![[ANN0]] = !{!"(test0,%x)", !"S_Use", !"S_None"} +; CHECK: ![[ANN1]] = !{!"(test0,%x)", !"S_None", !"S_Retain"} +; CHECK: ![[ANN2]] = !{!"(test0,%x)", !"S_Release", !"S_Use"} +; CHECK: ![[ANN3]] = !{!"(test0,%x)", !"S_None", !"S_Release"} +; CHECK: ![[ANN4]] = !{!"(test0,%x)", !"S_Retain", !"S_None"} diff --git a/test/Transforms/ObjCARC/basic.ll b/test/Transforms/ObjCARC/basic.ll index a1ee956..7bc58c4 100644 --- a/test/Transforms/ObjCARC/basic.ll +++ b/test/Transforms/ObjCARC/basic.ll @@ -2679,8 +2679,8 @@ define {<2 x float>, <2 x float>} @"\01-[A z]"({}* %self, i8* nocapture %_cmd) n invoke.cont: %0 = bitcast {}* %self to i8* %1 = tail call i8* @objc_retain(i8* %0) nounwind - tail call void @llvm.dbg.value(metadata !{{}* %self}, i64 0, metadata !0, metadata !{}) - tail call void @llvm.dbg.value(metadata !{{}* %self}, i64 0, metadata !0, metadata !{}) + tail call void @llvm.dbg.value(metadata {}* %self, i64 0, metadata !0, metadata !{}) + tail call void @llvm.dbg.value(metadata {}* %self, i64 0, metadata !0, metadata !{}) %ivar = load i64* @"OBJC_IVAR_$_A.myZ", align 8 %add.ptr = getelementptr i8* %0, i64 %ivar %tmp1 = bitcast i8* %add.ptr to float* @@ -3011,9 +3011,9 @@ define void @test67(i8* %x) { !llvm.module.flags = !{!1} -!0 = metadata !{} -!1 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{} +!1 = !{i32 1, !"Debug Info Version", i32 2} ; CHECK: attributes #0 = { nounwind readnone } ; CHECK: attributes [[NUW]] = { nounwind } -; CHECK: ![[RELEASE]] = metadata !{} +; CHECK: ![[RELEASE]] = !{} diff --git a/test/Transforms/ObjCARC/cfg-hazards.ll b/test/Transforms/ObjCARC/cfg-hazards.ll index 61e5a3b..746d56d 100644 --- a/test/Transforms/ObjCARC/cfg-hazards.ll +++ b/test/Transforms/ObjCARC/cfg-hazards.ll @@ -432,4 +432,4 @@ exit: ; CHECK: attributes [[NUW]] = { nounwind } -!0 = metadata !{} +!0 = !{} diff --git a/test/Transforms/ObjCARC/contract-marker.ll b/test/Transforms/ObjCARC/contract-marker.ll index 55a1b28..a828260 100644 --- a/test/Transforms/ObjCARC/contract-marker.ll +++ b/test/Transforms/ObjCARC/contract-marker.ll @@ -22,6 +22,6 @@ declare void @bar(i8*) !clang.arc.retainAutoreleasedReturnValueMarker = !{!0} -!0 = metadata !{metadata !"mov\09r7, r7\09\09@ marker for objc_retainAutoreleaseReturnValue"} +!0 = !{!"mov\09r7, r7\09\09@ marker for objc_retainAutoreleaseReturnValue"} ; CHECK: attributes [[NUW]] = { nounwind } diff --git a/test/Transforms/ObjCARC/contract-storestrong.ll b/test/Transforms/ObjCARC/contract-storestrong.ll index 50a2d97..c218e33 100644 --- a/test/Transforms/ObjCARC/contract-storestrong.ll +++ b/test/Transforms/ObjCARC/contract-storestrong.ll @@ -24,7 +24,7 @@ entry: ; Don't do this if the load is volatile. -; CHECK: define void @test1(i8* %p) { +; CHECK-LABEL: define void @test1(i8* %p) { ; CHECK-NEXT: entry: ; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* %p) [[NUW]] ; CHECK-NEXT: %tmp = load volatile i8** @x, align 8 @@ -43,7 +43,7 @@ entry: ; Don't do this if the store is volatile. -; CHECK: define void @test2(i8* %p) { +; CHECK-LABEL: define void @test2(i8* %p) { ; CHECK-NEXT: entry: ; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* %p) [[NUW]] ; CHECK-NEXT: %tmp = load i8** @x, align 8 @@ -63,15 +63,15 @@ entry: ; Don't do this if there's a use of the old pointer value between the store ; and the release. -; CHECK: define void @test3(i8* %newValue) { -; CHECK-NEXT: entry: -; CHECK-NEXT: %x0 = tail call i8* @objc_retain(i8* %newValue) [[NUW]] -; CHECK-NEXT: %x1 = load i8** @x, align 8 -; CHECK-NEXT: store i8* %x0, i8** @x, align 8 -; CHECK-NEXT: tail call void @use_pointer(i8* %x1), !clang.arc.no_objc_arc_exceptions !0 -; CHECK-NEXT: tail call void @objc_release(i8* %x1) [[NUW]], !clang.imprecise_release !0 -; CHECK-NEXT: ret void -; CHECK-NEXT: } +; CHECK-LABEL: define void @test3(i8* %newValue) { +; CHECK-NEXT: entry: +; CHECK-NEXT: %x0 = tail call i8* @objc_retain(i8* %newValue) [[NUW]] +; CHECK-NEXT: %x1 = load i8** @x, align 8 +; CHECK-NEXT: store i8* %x0, i8** @x, align 8 +; CHECK-NEXT: tail call void @use_pointer(i8* %x1), !clang.arc.no_objc_arc_exceptions !0 +; CHECK-NEXT: tail call void @objc_release(i8* %x1) [[NUW]], !clang.imprecise_release !0 +; CHECK-NEXT: ret void +; CHECK-NEXT: } define void @test3(i8* %newValue) { entry: %x0 = tail call i8* @objc_retain(i8* %newValue) nounwind @@ -84,15 +84,15 @@ entry: ; Like test3, but with an icmp use instead of a call, for good measure. -; CHECK: define i1 @test4(i8* %newValue, i8* %foo) { -; CHECK-NEXT: entry: -; CHECK-NEXT: %x0 = tail call i8* @objc_retain(i8* %newValue) [[NUW]] -; CHECK-NEXT: %x1 = load i8** @x, align 8 -; CHECK-NEXT: store i8* %x0, i8** @x, align 8 -; CHECK-NEXT: %t = icmp eq i8* %x1, %foo -; CHECK-NEXT: tail call void @objc_release(i8* %x1) [[NUW]], !clang.imprecise_release !0 -; CHECK-NEXT: ret i1 %t -; CHECK-NEXT: } +; CHECK-LABEL: define i1 @test4(i8* %newValue, i8* %foo) { +; CHECK-NEXT: entry: +; CHECK-NEXT: %x0 = tail call i8* @objc_retain(i8* %newValue) [[NUW]] +; CHECK-NEXT: %x1 = load i8** @x, align 8 +; CHECK-NEXT: store i8* %x0, i8** @x, align 8 +; CHECK-NEXT: %t = icmp eq i8* %x1, %foo +; CHECK-NEXT: tail call void @objc_release(i8* %x1) [[NUW]], !clang.imprecise_release !0 +; CHECK-NEXT: ret i1 %t +; CHECK-NEXT: } define i1 @test4(i8* %newValue, i8* %foo) { entry: %x0 = tail call i8* @objc_retain(i8* %newValue) nounwind @@ -105,7 +105,7 @@ entry: ; Do form an objc_storeStrong here, because the use is before the store. -; CHECK: define i1 @test5(i8* %newValue, i8* %foo) { +; CHECK-LABEL: define i1 @test5(i8* %newValue, i8* %foo) { ; CHECK: %t = icmp eq i8* %x1, %foo ; CHECK: tail call void @objc_storeStrong(i8** @x, i8* %newValue) [[NUW]] ; CHECK: } @@ -121,7 +121,7 @@ entry: ; Like test5, but the release is before the store. -; CHECK: define i1 @test6(i8* %newValue, i8* %foo) { +; CHECK-LABEL: define i1 @test6(i8* %newValue, i8* %foo) { ; CHECK: %t = icmp eq i8* %x1, %foo ; CHECK: tail call void @objc_storeStrong(i8** @x, i8* %newValue) [[NUW]] ; CHECK: } @@ -137,7 +137,7 @@ entry: ; Like test0, but there's no store, so don't form an objc_storeStrong. -; CHECK-LABEL: define void @test7( +; CHECK-LABEL: define void @test7( ; CHECK-NEXT: entry: ; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* %p) [[NUW]] ; CHECK-NEXT: %tmp = load i8** @x, align 8 @@ -154,7 +154,7 @@ entry: ; Like test0, but there's no retain, so don't form an objc_storeStrong. -; CHECK-LABEL: define void @test8( +; CHECK-LABEL: define void @test8( ; CHECK-NEXT: entry: ; CHECK-NEXT: %tmp = load i8** @x, align 8 ; CHECK-NEXT: store i8* %p, i8** @x, align 8 @@ -169,6 +169,54 @@ entry: ret void } -!0 = metadata !{} +; Make sure that we properly handle release that *may* release our new +; value in between the retain and the store. We need to be sure that +; this we can safely move the retain to the store. This specific test +; makes sure that we properly handled a release of an unrelated +; pointer. +; +; CHECK-LABEL: define i1 @test9(i8* %newValue, i8* %foo, i8* %unrelated_ptr) { +; CHECK-NOT: objc_storeStrong +define i1 @test9(i8* %newValue, i8* %foo, i8* %unrelated_ptr) { +entry: + %x0 = tail call i8* @objc_retain(i8* %newValue) nounwind + tail call void @objc_release(i8* %unrelated_ptr) nounwind, !clang.imprecise_release !0 + %x1 = load i8** @x, align 8 + tail call void @objc_release(i8* %x1) nounwind, !clang.imprecise_release !0 + %t = icmp eq i8* %x1, %foo + store i8* %newValue, i8** @x, align 8 + ret i1 %t +} + +; Make sure that we don't perform the optimization when we just have a call. +; +; CHECK-LABEL: define i1 @test10(i8* %newValue, i8* %foo, i8* %unrelated_ptr) { +; CHECK-NOT: objc_storeStrong +define i1 @test10(i8* %newValue, i8* %foo, i8* %unrelated_ptr) { +entry: + %x0 = tail call i8* @objc_retain(i8* %newValue) nounwind + call void @use_pointer(i8* %unrelated_ptr) + %x1 = load i8** @x, align 8 + tail call void @objc_release(i8* %x1) nounwind, !clang.imprecise_release !0 + %t = icmp eq i8* %x1, %foo + store i8* %newValue, i8** @x, align 8 + ret i1 %t +} + +; Make sure we form the store strong if the use in between the retain +; and the store does not touch reference counts. +; CHECK-LABEL: define i1 @test11(i8* %newValue, i8* %foo, i8* %unrelated_ptr) { +; CHECK: objc_storeStrong +define i1 @test11(i8* %newValue, i8* %foo, i8* %unrelated_ptr) { +entry: + %x0 = tail call i8* @objc_retain(i8* %newValue) nounwind + %t = icmp eq i8* %newValue, %foo + %x1 = load i8** @x, align 8 + tail call void @objc_release(i8* %x1) nounwind, !clang.imprecise_release !0 + store i8* %newValue, i8** @x, align 8 + ret i1 %t +} + +!0 = !{} ; CHECK: attributes [[NUW]] = { nounwind } diff --git a/test/Transforms/ObjCARC/contract-testcases.ll b/test/Transforms/ObjCARC/contract-testcases.ll index 0bf63a6..74a4a7f 100644 --- a/test/Transforms/ObjCARC/contract-testcases.ll +++ b/test/Transforms/ObjCARC/contract-testcases.ll @@ -89,7 +89,7 @@ lpad: ; preds = %entry !clang.arc.retainAutoreleasedReturnValueMarker = !{!0} -!0 = metadata !{metadata !"mov\09r7, r7\09\09@ marker for objc_retainAutoreleaseReturnValue"} +!0 = !{!"mov\09r7, r7\09\09@ marker for objc_retainAutoreleaseReturnValue"} ; CHECK: attributes #0 = { optsize } ; CHECK: attributes [[NUW]] = { nounwind } diff --git a/test/Transforms/ObjCARC/empty-block.ll b/test/Transforms/ObjCARC/empty-block.ll index 0440ab8..cc82d10 100644 --- a/test/Transforms/ObjCARC/empty-block.ll +++ b/test/Transforms/ObjCARC/empty-block.ll @@ -56,4 +56,4 @@ define %0* @test1() nounwind { declare %0* @foo() -!0 = metadata !{} +!0 = !{} diff --git a/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll b/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll index 03af93e..c72566c 100644 --- a/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll +++ b/test/Transforms/ObjCARC/ensure-that-exception-unwind-path-is-visited.ll @@ -41,10 +41,10 @@ entry: %tmp2 = bitcast %struct._class_t* %tmp to i8*, !dbg !37 ; CHECK: call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* %tmp2, i8* %tmp1) %call = call i8* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8* (i8*, i8*)*)(i8* %tmp2, i8* %tmp1), !dbg !37, !clang.arc.no_objc_arc_exceptions !38 - call void @llvm.dbg.value(metadata !{i8* %call}, i64 0, metadata !12, metadata !{}), !dbg !37 + call void @llvm.dbg.value(metadata i8* %call, i64 0, metadata i32 02, metadata !{}), !dbg !37 ; CHECK: call i8* @objc_retain(i8* %call) [[NUW:#[0-9]+]] %tmp3 = call i8* @objc_retain(i8* %call) nounwind, !dbg !39 - call void @llvm.dbg.value(metadata !{i8* %call}, i64 0, metadata !25, metadata !{}), !dbg !39 + call void @llvm.dbg.value(metadata i8* %call, i64 0, metadata !25, metadata !{}), !dbg !39 invoke fastcc void @ThrowFunc(i8* %call) to label %eh.cont unwind label %lpad, !dbg !40, !clang.arc.no_objc_arc_exceptions !38 @@ -58,7 +58,7 @@ lpad: ; preds = %entry catch i8* null, !dbg !40 %tmp5 = extractvalue { i8*, i32 } %tmp4, 0, !dbg !40 %exn.adjusted = call i8* @objc_begin_catch(i8* %tmp5) nounwind, !dbg !44 - call void @llvm.dbg.value(metadata !45, i64 0, metadata !21, metadata !{}), !dbg !46 + call void @llvm.dbg.value(metadata i8 0, i64 0, metadata !21, metadata !{}), !dbg !46 call void @objc_end_catch(), !dbg !49, !clang.arc.no_objc_arc_exceptions !38 ; CHECK: call void @objc_release(i8* %call) call void @objc_release(i8* %call) nounwind, !dbg !42, !clang.imprecise_release !38 @@ -87,7 +87,7 @@ declare void @objc_exception_rethrow() define internal fastcc void @ThrowFunc(i8* %obj) uwtable noinline ssp { entry: %tmp = call i8* @objc_retain(i8* %obj) nounwind - call void @llvm.dbg.value(metadata !{i8* %obj}, i64 0, metadata !32, metadata !{}), !dbg !55 + call void @llvm.dbg.value(metadata i8* %obj, i64 0, metadata !32, metadata !{}), !dbg !55 %tmp1 = load %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_1", align 8, !dbg !56 %tmp2 = load i8** @"\01L_OBJC_SELECTOR_REFERENCES_5", align 8, !dbg !56, !invariant.load !38 %tmp3 = bitcast %struct._class_t* %tmp1 to i8*, !dbg !56 @@ -113,62 +113,62 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!33, !34, !35, !36, !61} -!0 = metadata !{metadata !"0x11\0016\00clang version 3.3 \001\00\002\00\000", metadata !60, metadata !1, metadata !1, metadata !3, metadata !1, null} ; [ DW_TAG_compile_unit ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] [DW_LANG_ObjC] -!1 = metadata !{i32 0} -!3 = metadata !{metadata !5, metadata !27} -!5 = metadata !{metadata !"0x2e\00main\00main\00\009\000\001\000\006\000\001\0010", metadata !60, metadata !6, metadata !7, null, i32 ()* @main, null, null, metadata !10} ; [ DW_TAG_subprogram ] [line 9] [def] [scope 10] [main] -!6 = metadata !{metadata !"0x29", metadata !60} ; [ DW_TAG_file_type ] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{metadata !9} -!9 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!10 = metadata !{metadata !11} -!11 = metadata !{metadata !12, metadata !21, metadata !25} -!12 = metadata !{metadata !"0x100\00obj\0011\000", metadata !13, metadata !6, metadata !14} ; [ DW_TAG_auto_variable ] [obj] [line 11] -!13 = metadata !{metadata !"0xb\0010\000\000", metadata !60, metadata !5} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!14 = metadata !{metadata !"0x16\00id\0011\000\000\000\000", metadata !60, null, metadata !15} ; [ DW_TAG_typedef ] [id] [line 11, size 0, align 0, offset 0] [from ] -!15 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", metadata !60, null, metadata !16} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from objc_object] -!16 = metadata !{metadata !"0x13\00objc_object\000\000\000\000\000\000", metadata !60, null, null, metadata !17, null, i32 0, null} ; [ DW_TAG_structure_type ] [objc_object] [line 0, size 0, align 0, offset 0] [def] [from ] -!17 = metadata !{metadata !18} -!18 = metadata !{metadata !"0xd\00isa\000\0064\000\000\000", metadata !60, metadata !16, metadata !19} ; [ DW_TAG_member ] [isa] [line 0, size 64, align 0, offset 0] [from ] -!19 = metadata !{metadata !"0xf\00\000\0064\000\000\000", null, null, metadata !20} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from objc_class] -!20 = metadata !{metadata !"0x13\00objc_class\000\000\000\000\004\000", metadata !60, null, null, null, null, null, null} ; [ DW_TAG_structure_type ] [objc_class] [line 0, size 0, align 0, offset 0] [decl] [from ] -!21 = metadata !{metadata !"0x100\00ok\0013\000", metadata !22, metadata !6, metadata !23} ; [ DW_TAG_auto_variable ] [ok] [line 13] -!22 = metadata !{metadata !"0xb\0012\000\001", metadata !60, metadata !13} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!23 = metadata !{metadata !"0x16\00BOOL\0062\000\000\000\000", metadata !60, null, metadata !24} ; [ DW_TAG_typedef ] [BOOL] [line 62, size 0, align 0, offset 0] [from signed char] -!24 = metadata !{metadata !"0x24\00signed char\000\008\008\000\000\006", null, null} ; [ DW_TAG_base_type ] [signed char] [line 0, size 8, align 8, offset 0, enc DW_ATE_signed_char] -!25 = metadata !{metadata !"0x100\00obj2\0015\000", metadata !26, metadata !6, metadata !14} ; [ DW_TAG_auto_variable ] [obj2] [line 15] -!26 = metadata !{metadata !"0xb\0014\000\002", metadata !60, metadata !22} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!27 = metadata !{metadata !"0x2e\00ThrowFunc\00ThrowFunc\00\004\001\001\000\006\00256\001\005", metadata !60, metadata !6, metadata !28, null, void (i8*)* @ThrowFunc, null, null, metadata !30} ; [ DW_TAG_subprogram ] [line 4] [local] [def] [scope 5] [ThrowFunc] -!28 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !29, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!29 = metadata !{null, metadata !14} -!30 = metadata !{metadata !31} -!31 = metadata !{metadata !32} -!32 = metadata !{metadata !"0x101\00obj\0016777220\000", metadata !27, metadata !6, metadata !14} ; [ DW_TAG_arg_variable ] [obj] [line 4] -!33 = metadata !{i32 1, metadata !"Objective-C Version", i32 2} -!34 = metadata !{i32 1, metadata !"Objective-C Image Info Version", i32 0} -!35 = metadata !{i32 1, metadata !"Objective-C Image Info Section", metadata !"__DATA, __objc_imageinfo, regular, no_dead_strip"} -!36 = metadata !{i32 4, metadata !"Objective-C Garbage Collection", i32 0} -!37 = metadata !{i32 11, i32 0, metadata !13, null} -!38 = metadata !{} -!39 = metadata !{i32 15, i32 0, metadata !26, null} -!40 = metadata !{i32 17, i32 0, metadata !41, null} -!41 = metadata !{metadata !"0xb\0016\000\003", metadata !60, metadata !26} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!42 = metadata !{i32 22, i32 0, metadata !26, null} -!43 = metadata !{i32 23, i32 0, metadata !22, null} -!44 = metadata !{i32 19, i32 0, metadata !41, null} -!45 = metadata !{i8 0} -!46 = metadata !{i32 20, i32 0, metadata !47, null} -!47 = metadata !{metadata !"0xb\0019\000\005", metadata !60, metadata !48} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!48 = metadata !{metadata !"0xb\0019\000\004", metadata !60, metadata !26} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!49 = metadata !{i32 21, i32 0, metadata !47, null} -!50 = metadata !{i32 24, i32 0, metadata !51, null} -!51 = metadata !{metadata !"0xb\0023\000\006", metadata !60, metadata !22} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!52 = metadata !{i32 25, i32 0, metadata !51, null} -!53 = metadata !{i32 27, i32 0, metadata !13, null} -!54 = metadata !{i32 28, i32 0, metadata !13, null} -!55 = metadata !{i32 4, i32 0, metadata !27, null} -!56 = metadata !{i32 6, i32 0, metadata !57, null} -!57 = metadata !{metadata !"0xb\005\000\007", metadata !60, metadata !27} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] -!58 = metadata !{i32 7, i32 0, metadata !57, null} -!60 = metadata !{metadata !"test.m", metadata !"/Volumes/Files/gottesmmcab/Radar/12906997"} -!61 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\0016\00clang version 3.3 \001\00\002\00\000", !60, !1, !1, !3, !1, null} ; [ DW_TAG_compile_unit ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] [DW_LANG_ObjC] +!1 = !{i32 0} +!3 = !{!5, !27} +!5 = !{!"0x2e\00main\00main\00\009\000\001\000\006\000\001\0010", !60, !6, !7, null, i32 ()* @main, null, null, !10} ; [ DW_TAG_subprogram ] [line 9] [def] [scope 10] [main] +!6 = !{!"0x29", !60} ; [ DW_TAG_file_type ] +!7 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{!9} +!9 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!10 = !{!11} +!11 = !{!12, !21, !25} +!12 = !{!"0x100\00obj\0011\000", !13, !6, !14} ; [ DW_TAG_auto_variable ] [obj] [line 11] +!13 = !{!"0xb\0010\000\000", !60, !5} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!14 = !{!"0x16\00id\0011\000\000\000\000", !60, null, !15} ; [ DW_TAG_typedef ] [id] [line 11, size 0, align 0, offset 0] [from ] +!15 = !{!"0xf\00\000\0064\0064\000\000", !60, null, !16} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from objc_object] +!16 = !{!"0x13\00objc_object\000\000\000\000\000\000", !60, null, null, !17, null, i32 0, null} ; [ DW_TAG_structure_type ] [objc_object] [line 0, size 0, align 0, offset 0] [def] [from ] +!17 = !{!18} +!18 = !{!"0xd\00isa\000\0064\000\000\000", !60, !16, !19} ; [ DW_TAG_member ] [isa] [line 0, size 64, align 0, offset 0] [from ] +!19 = !{!"0xf\00\000\0064\000\000\000", null, null, !20} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from objc_class] +!20 = !{!"0x13\00objc_class\000\000\000\000\004\000", !60, null, null, null, null, null, null} ; [ DW_TAG_structure_type ] [objc_class] [line 0, size 0, align 0, offset 0] [decl] [from ] +!21 = !{!"0x100\00ok\0013\000", !22, !6, !23} ; [ DW_TAG_auto_variable ] [ok] [line 13] +!22 = !{!"0xb\0012\000\001", !60, !13} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!23 = !{!"0x16\00BOOL\0062\000\000\000\000", !60, null, !24} ; [ DW_TAG_typedef ] [BOOL] [line 62, size 0, align 0, offset 0] [from signed char] +!24 = !{!"0x24\00signed char\000\008\008\000\000\006", null, null} ; [ DW_TAG_base_type ] [signed char] [line 0, size 8, align 8, offset 0, enc DW_ATE_signed_char] +!25 = !{!"0x100\00obj2\0015\000", !26, !6, !14} ; [ DW_TAG_auto_variable ] [obj2] [line 15] +!26 = !{!"0xb\0014\000\002", !60, !22} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!27 = !{!"0x2e\00ThrowFunc\00ThrowFunc\00\004\001\001\000\006\00256\001\005", !60, !6, !28, null, void (i8*)* @ThrowFunc, null, null, !30} ; [ DW_TAG_subprogram ] [line 4] [local] [def] [scope 5] [ThrowFunc] +!28 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !29, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!29 = !{null, !14} +!30 = !{!31} +!31 = !{!32} +!32 = !{!"0x101\00obj\0016777220\000", !27, !6, !14} ; [ DW_TAG_arg_variable ] [obj] [line 4] +!33 = !{i32 1, !"Objective-C Version", i32 2} +!34 = !{i32 1, !"Objective-C Image Info Version", i32 0} +!35 = !{i32 1, !"Objective-C Image Info Section", !"__DATA, __objc_imageinfo, regular, no_dead_strip"} +!36 = !{i32 4, !"Objective-C Garbage Collection", i32 0} +!37 = !MDLocation(line: 11, scope: !13) +!38 = !{} +!39 = !MDLocation(line: 15, scope: !26) +!40 = !MDLocation(line: 17, scope: !41) +!41 = !{!"0xb\0016\000\003", !60, !26} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!42 = !MDLocation(line: 22, scope: !26) +!43 = !MDLocation(line: 23, scope: !22) +!44 = !MDLocation(line: 19, scope: !41) +!45 = !{i8 0} +!46 = !MDLocation(line: 20, scope: !47) +!47 = !{!"0xb\0019\000\005", !60, !48} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!48 = !{!"0xb\0019\000\004", !60, !26} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!49 = !MDLocation(line: 21, scope: !47) +!50 = !MDLocation(line: 24, scope: !51) +!51 = !{!"0xb\0023\000\006", !60, !22} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!52 = !MDLocation(line: 25, scope: !51) +!53 = !MDLocation(line: 27, scope: !13) +!54 = !MDLocation(line: 28, scope: !13) +!55 = !MDLocation(line: 4, scope: !27) +!56 = !MDLocation(line: 6, scope: !57) +!57 = !{!"0xb\005\000\007", !60, !27} ; [ DW_TAG_lexical_block ] [/Volumes/Files/gottesmmcab/Radar/12906997/test.m] +!58 = !MDLocation(line: 7, scope: !57) +!60 = !{!"test.m", !"/Volumes/Files/gottesmmcab/Radar/12906997"} +!61 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Transforms/ObjCARC/escape.ll b/test/Transforms/ObjCARC/escape.ll index 28f2e80..357f759 100644 --- a/test/Transforms/ObjCARC/escape.ll +++ b/test/Transforms/ObjCARC/escape.ll @@ -128,7 +128,7 @@ declare i8* @objc_storeWeak(i8**, i8*) declare i8* @not_really_objc_storeWeak(i8**, i8*) declare void @objc_release(i8*) -!0 = metadata !{} +!0 = !{} ; CHECK: attributes [[NUW]] = { nounwind } ; CHECK: attributes #1 = { nounwind ssp } diff --git a/test/Transforms/ObjCARC/intrinsic-use.ll b/test/Transforms/ObjCARC/intrinsic-use.ll index f3833cb..b1e56c8 100644 --- a/test/Transforms/ObjCARC/intrinsic-use.ll +++ b/test/Transforms/ObjCARC/intrinsic-use.ll @@ -112,5 +112,5 @@ entry: } -!0 = metadata !{} +!0 = !{} diff --git a/test/Transforms/ObjCARC/invoke.ll b/test/Transforms/ObjCARC/invoke.ll index 04d057b..5ef5184 100644 --- a/test/Transforms/ObjCARC/invoke.ll +++ b/test/Transforms/ObjCARC/invoke.ll @@ -221,4 +221,4 @@ declare i32 @__objc_personality_v0(...) ; CHECK: attributes [[NUW]] = { nounwind } -!0 = metadata !{} +!0 = !{} diff --git a/test/Transforms/ObjCARC/nested.ll b/test/Transforms/ObjCARC/nested.ll index 2eeb4fc..7d72e37 100644 --- a/test/Transforms/ObjCARC/nested.ll +++ b/test/Transforms/ObjCARC/nested.ll @@ -21,7 +21,7 @@ declare void @__crasher_block_invoke(i8* nocapture) declare i8* @objc_retainBlock(i8*) declare void @__crasher_block_invoke1(i8* nocapture) -!0 = metadata !{} +!0 = !{} ; Delete a nested retain+release pair. diff --git a/test/Transforms/ObjCARC/path-overflow.ll b/test/Transforms/ObjCARC/path-overflow.ll index 3c14353..d239653 100644 --- a/test/Transforms/ObjCARC/path-overflow.ll +++ b/test/Transforms/ObjCARC/path-overflow.ll @@ -2190,4 +2190,4 @@ return: ; No predecessors! } -!0 = metadata !{} +!0 = !{} diff --git a/test/Transforms/ObjCARC/retain-not-declared.ll b/test/Transforms/ObjCARC/retain-not-declared.ll index 3a2bd03..4162022 100644 --- a/test/Transforms/ObjCARC/retain-not-declared.ll +++ b/test/Transforms/ObjCARC/retain-not-declared.ll @@ -64,6 +64,6 @@ lpad100: ; preds = %invoke.cont93 declare i32 @__gxx_personality_v0(...) -!0 = metadata !{} +!0 = !{} ; CHECK: attributes [[NUW]] = { nounwind } diff --git a/test/Transforms/ObjCARC/split-backedge.ll b/test/Transforms/ObjCARC/split-backedge.ll index 1b7cf44..2507173 100644 --- a/test/Transforms/ObjCARC/split-backedge.ll +++ b/test/Transforms/ObjCARC/split-backedge.ll @@ -45,6 +45,6 @@ declare void @objc_release(i8*) declare i8* @objc_retain(i8*) declare void @use_pointer(i8*) -!0 = metadata !{} +!0 = !{} ; CHECK: attributes [[NUW]] = { nounwind } diff --git a/test/Transforms/ObjCARC/weak-copies.ll b/test/Transforms/ObjCARC/weak-copies.ll index 5dab4e0..13d0b0a 100644 --- a/test/Transforms/ObjCARC/weak-copies.ll +++ b/test/Transforms/ObjCARC/weak-copies.ll @@ -86,4 +86,4 @@ declare void @objc_destroyWeak(i8**) ; CHECK: attributes [[NUW]] = { nounwind } -!0 = metadata !{} +!0 = !{} |