Make Destroy.Op functions able to have a body (#6729)

This is iterating on how `Destroy.Op` generates, to start adding body
capabilities. This changes the way the signature is created, and adds a
`CoreWitness` function kind so that mangling can prevent name
collisions. The result is that what _was_ `DestroyOp` is now
`Core.Destroy.Op` or, as can be seen in
toolchain/lower/testdata/interop/cpp/nullptr.carbon,
`_COp.<hash>:core.Destroy.Core` where `:core` is indicating that it's a
core witness (taking a note from `:thunk`).

Assisted-by: Google Antigravity with Gemini 3 Flash
This commit is contained in:
Jon Ross-Perkins
2026-03-02 17:57:31 +00:00
committed by GitHub
parent 2389590230
commit b14015602b
163 changed files with 2472 additions and 2339 deletions
@@ -81,11 +81,11 @@ fn M() {
// CHECK:STDOUT: %.loc52 = load i32, ptr %n.var, align 4, !dbg !16
// CHECK:STDOUT: call void @_CF.Main.b88d1103f417c6d4(i32 %.loc52), !dbg !17
// CHECK:STDOUT: %.loc53_18 = load i32, ptr %n.var, align 4, !dbg !18
// CHECK:STDOUT: %G.call.loc53 = call i32 @_CG.Main.329e9a7481f16207(i32 %.loc53_18), !dbg !19
// CHECK:STDOUT: %G.call.loc53 = call i32 @_CG.Main.bfb441135f07cbe1(i32 %.loc53_18), !dbg !19
// CHECK:STDOUT: %.loc54 = load double, ptr %p.var, align 8, !dbg !20
// CHECK:STDOUT: call void @_CF.Main.d4b5665541d5d7a8(double %.loc54), !dbg !21
// CHECK:STDOUT: %.loc55_18 = load double, ptr %p.var, align 8, !dbg !22
// CHECK:STDOUT: %G.call.loc55 = call double @_CG.Main.7220df690d061955(double %.loc55_18), !dbg !23
// CHECK:STDOUT: %G.call.loc55 = call double @_CG.Main.29cf1dfeccef7249(double %.loc55_18), !dbg !23
// CHECK:STDOUT: ret void, !dbg !24
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -102,7 +102,7 @@ fn M() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.329e9a7481f16207(i32 %x) #0 !dbg !32 {
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.bfb441135f07cbe1(i32 %x) #0 !dbg !32 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc29_6.3.temp = alloca i32, align 4, !dbg !37
// CHECK:STDOUT: %.loc31_8.3.temp = alloca i32, align 4, !dbg !38
@@ -118,7 +118,7 @@ fn M() {
// CHECK:STDOUT: store i32 %H.call.loc29, ptr %.loc29_6.3.temp, align 4, !dbg !37
// CHECK:STDOUT: %H.call.loc30 = call %type @_CH.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !46
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.3.temp), !dbg !38
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.329e9a7481f16207(i32 %x), !dbg !38
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.bfb441135f07cbe1(i32 %x), !dbg !38
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.3.temp), !dbg !39
// CHECK:STDOUT: store i32 %G.call, ptr %.loc31_8.3.temp, align 4, !dbg !38
// CHECK:STDOUT: %.loc31_8.5 = load i32, ptr %.loc31_8.3.temp, align 4, !dbg !38
@@ -149,7 +149,7 @@ fn M() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr double @_CG.Main.7220df690d061955(double %x) #0 !dbg !62 {
// CHECK:STDOUT: define linkonce_odr double @_CG.Main.29cf1dfeccef7249(double %x) #0 !dbg !62 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc29_6.3.temp = alloca double, align 8, !dbg !65
// CHECK:STDOUT: %.loc31_8.3.temp = alloca double, align 8, !dbg !66
@@ -165,7 +165,7 @@ fn M() {
// CHECK:STDOUT: store double %H.call.loc29, ptr %.loc29_6.3.temp, align 8, !dbg !65
// CHECK:STDOUT: %H.call.loc30 = call %type @_CH.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !74
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_8.3.temp), !dbg !66
// CHECK:STDOUT: %G.call = call double @_CG.Main.7220df690d061955(double %x), !dbg !66
// CHECK:STDOUT: %G.call = call double @_CG.Main.29cf1dfeccef7249(double %x), !dbg !66
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc31_9.3.temp), !dbg !67
// CHECK:STDOUT: store double %G.call, ptr %.loc31_8.3.temp, align 8, !dbg !66
// CHECK:STDOUT: %.loc31_8.5 = load double, ptr %.loc31_8.3.temp, align 8, !dbg !66
@@ -267,7 +267,7 @@ fn M() {
// CHECK:STDOUT: !29 = !{!30}
// CHECK:STDOUT: !30 = !DILocalVariable(arg: 1, scope: !25, type: !28)
// CHECK:STDOUT: !31 = !DILocation(line: 19, column: 1, scope: !25)
// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.329e9a7481f16207", scope: null, file: !3, line: 28, type: !33, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35)
// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.bfb441135f07cbe1", scope: null, file: !3, line: 28, type: !33, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !35)
// CHECK:STDOUT: !33 = !DISubroutineType(types: !34)
// CHECK:STDOUT: !34 = !{!28, !28}
// CHECK:STDOUT: !35 = !{!36}
@@ -297,7 +297,7 @@ fn M() {
// CHECK:STDOUT: !59 = !{!60}
// CHECK:STDOUT: !60 = !DILocalVariable(arg: 1, scope: !56, type: !7)
// CHECK:STDOUT: !61 = !DILocation(line: 19, column: 1, scope: !56)
// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.7220df690d061955", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !63)
// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.29cf1dfeccef7249", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !63)
// CHECK:STDOUT: !63 = !{!64}
// CHECK:STDOUT: !64 = !DILocalVariable(arg: 1, scope: !62, type: !7)
// CHECK:STDOUT: !65 = !DILocation(line: 29, column: 3, scope: !62)
@@ -50,7 +50,7 @@ fn M() -> i32 {
// CHECK:STDOUT: %.loc34 = load i32, ptr %n.var, align 4, !dbg !10
// CHECK:STDOUT: call void @_CF.Main.b88d1103f417c6d4(i32 %.loc34), !dbg !11
// CHECK:STDOUT: %.loc35_9 = load i32, ptr %n.var, align 4, !dbg !12
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.329e9a7481f16207(i32 %.loc35_9), !dbg !13
// CHECK:STDOUT: %G.call = call i32 @_CG.Main.bfb441135f07cbe1(i32 %.loc35_9), !dbg !13
// CHECK:STDOUT: store i32 %G.call, ptr %m.var, align 4, !dbg !14
// CHECK:STDOUT: %.loc36 = load i32, ptr %m.var, align 4, !dbg !15
// CHECK:STDOUT: ret i32 %.loc36, !dbg !16
@@ -66,7 +66,7 @@ fn M() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.329e9a7481f16207(i32 %x) #0 !dbg !23 {
// CHECK:STDOUT: define linkonce_odr i32 @_CG.Main.bfb441135f07cbe1(i32 %x) #0 !dbg !23 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc25_6.3.temp = alloca i32, align 4, !dbg !28
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc25_6.3.temp), !dbg !28
@@ -115,7 +115,7 @@ fn M() -> i32 {
// CHECK:STDOUT: !20 = !{!21}
// CHECK:STDOUT: !21 = !DILocalVariable(arg: 1, scope: !17, type: !7)
// CHECK:STDOUT: !22 = !DILocation(line: 16, column: 1, scope: !17)
// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.329e9a7481f16207", scope: null, file: !3, line: 24, type: !24, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !26)
// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.bfb441135f07cbe1", scope: null, file: !3, line: 24, type: !24, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !26)
// CHECK:STDOUT: !24 = !DISubroutineType(types: !25)
// CHECK:STDOUT: !25 = !{!7, !7}
// CHECK:STDOUT: !26 = !{!27}
@@ -53,9 +53,9 @@ fn M() {
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8
// CHECK:STDOUT: %.loc39_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9
// CHECK:STDOUT: call void @_CF.Main.329e9a7481f16207(ptr %.loc39_5), !dbg !10
// CHECK:STDOUT: call void @_CF.Main.bfb441135f07cbe1(ptr %.loc39_5), !dbg !10
// CHECK:STDOUT: %.loc40_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11
// CHECK:STDOUT: call void @_CF.Main.7220df690d061955(ptr %.loc40_5), !dbg !12
// CHECK:STDOUT: call void @_CF.Main.29cf1dfeccef7249(ptr %.loc40_5), !dbg !12
// CHECK:STDOUT: ret void, !dbg !13
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -63,18 +63,18 @@ fn M() {
// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.329e9a7481f16207(ptr %x) #0 !dbg !14 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !14 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !20
// CHECK:STDOUT: call void @_CB.Main.329e9a7481f16207(ptr %x), !dbg !21
// CHECK:STDOUT: call void @_CB.Main.bfb441135f07cbe1(ptr %x), !dbg !21
// CHECK:STDOUT: ret void, !dbg !22
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.7220df690d061955(ptr %x) #0 !dbg !23 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !23 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !26
// CHECK:STDOUT: call void @_CB.Main.7220df690d061955(ptr %x), !dbg !27
// CHECK:STDOUT: call void @_CB.Main.29cf1dfeccef7249(ptr %x), !dbg !27
// CHECK:STDOUT: ret void, !dbg !28
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -85,7 +85,7 @@ fn M() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.329e9a7481f16207(ptr %x) #0 !dbg !35 {
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !35 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc27_7.3.temp = alloca i32, align 4, !dbg !38
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.3.temp), !dbg !38
@@ -96,7 +96,7 @@ fn M() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.7220df690d061955(ptr %x) #0 !dbg !41 {
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !41 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc27_7.3.temp = alloca double, align 8, !dbg !44
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc27_7.3.temp), !dbg !44
@@ -142,7 +142,7 @@ fn M() {
// CHECK:STDOUT: !11 = !DILocation(line: 40, column: 5, scope: !4)
// CHECK:STDOUT: !12 = !DILocation(line: 40, column: 3, scope: !4)
// CHECK:STDOUT: !13 = !DILocation(line: 35, column: 1, scope: !4)
// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.329e9a7481f16207", scope: null, file: !3, line: 30, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18)
// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.bfb441135f07cbe1", scope: null, file: !3, line: 30, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18)
// CHECK:STDOUT: !15 = !DISubroutineType(types: !16)
// CHECK:STDOUT: !16 = !{null, !17}
// CHECK:STDOUT: !17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 8)
@@ -151,7 +151,7 @@ fn M() {
// CHECK:STDOUT: !20 = !DILocation(line: 31, column: 3, scope: !14)
// CHECK:STDOUT: !21 = !DILocation(line: 32, column: 3, scope: !14)
// CHECK:STDOUT: !22 = !DILocation(line: 30, column: 1, scope: !14)
// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.7220df690d061955", scope: null, file: !3, line: 30, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !24)
// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.29cf1dfeccef7249", scope: null, file: !3, line: 30, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !24)
// CHECK:STDOUT: !24 = !{!25}
// CHECK:STDOUT: !25 = !DILocalVariable(arg: 1, scope: !23, type: !17)
// CHECK:STDOUT: !26 = !DILocation(line: 31, column: 3, scope: !23)
@@ -163,13 +163,13 @@ fn M() {
// CHECK:STDOUT: !32 = !{!33}
// CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !29, type: !17)
// CHECK:STDOUT: !34 = !DILocation(line: 19, column: 3, scope: !29)
// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.329e9a7481f16207", scope: null, file: !3, line: 26, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36)
// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.bfb441135f07cbe1", scope: null, file: !3, line: 26, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36)
// CHECK:STDOUT: !36 = !{!37}
// CHECK:STDOUT: !37 = !DILocalVariable(arg: 1, scope: !35, type: !17)
// CHECK:STDOUT: !38 = !DILocation(line: 27, column: 3, scope: !35)
// CHECK:STDOUT: !39 = !DILocation(line: 27, column: 5, scope: !35)
// CHECK:STDOUT: !40 = !DILocation(line: 26, column: 1, scope: !35)
// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.7220df690d061955", scope: null, file: !3, line: 26, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !42)
// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.29cf1dfeccef7249", scope: null, file: !3, line: 26, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !42)
// CHECK:STDOUT: !42 = !{!43}
// CHECK:STDOUT: !43 = !DILocalVariable(arg: 1, scope: !41, type: !17)
// CHECK:STDOUT: !44 = !DILocation(line: 27, column: 3, scope: !41)
@@ -64,15 +64,15 @@ fn Run() {
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define void @main() #0 !dbg !16 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: call void @_CG.Main.504f892e0db74da2(), !dbg !19
// CHECK:STDOUT: call void @_CG.Main.7fea82a824f066aa(), !dbg !20
// CHECK:STDOUT: call void @_CG.Main.27a852a6bab6ed2e(), !dbg !19
// CHECK:STDOUT: call void @_CG.Main.2de7c972fe093485(), !dbg !20
// CHECK:STDOUT: ret void, !dbg !21
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: declare i32 @printf(ptr, ...)
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.504f892e0db74da2() #0 !dbg !22 {
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.27a852a6bab6ed2e() #0 !dbg !22 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc37_20.1.temp = alloca i1, align 1, !dbg !23
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc37_20.1.temp), !dbg !23
@@ -85,7 +85,7 @@ fn Run() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.7fea82a824f066aa() #0 !dbg !25 {
// CHECK:STDOUT: define linkonce_odr void @_CG.Main.2de7c972fe093485() #0 !dbg !25 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc37_20.1.temp = alloca i32, align 4, !dbg !26
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc37_20.1.temp), !dbg !26
@@ -130,9 +130,9 @@ fn Run() {
// CHECK:STDOUT: !19 = !DILocation(line: 41, column: 3, scope: !16)
// CHECK:STDOUT: !20 = !DILocation(line: 42, column: 3, scope: !16)
// CHECK:STDOUT: !21 = !DILocation(line: 40, column: 1, scope: !16)
// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.504f892e0db74da2", scope: null, file: !3, line: 36, type: !17, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.27a852a6bab6ed2e", scope: null, file: !3, line: 36, type: !17, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !23 = !DILocation(line: 37, column: 16, scope: !22)
// CHECK:STDOUT: !24 = !DILocation(line: 36, column: 1, scope: !22)
// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.7fea82a824f066aa", scope: null, file: !3, line: 36, type: !17, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.2de7c972fe093485", scope: null, file: !3, line: 36, type: !17, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !26 = !DILocation(line: 37, column: 16, scope: !25)
// CHECK:STDOUT: !27 = !DILocation(line: 36, column: 1, scope: !25)
@@ -60,9 +60,9 @@ fn M() {
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_i32.var), !dbg !7
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ptr_f64.var), !dbg !8
// CHECK:STDOUT: %.loc46_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9
// CHECK:STDOUT: call void @_CF.Main.329e9a7481f16207(ptr %.loc46_5), !dbg !10
// CHECK:STDOUT: call void @_CF.Main.bfb441135f07cbe1(ptr %.loc46_5), !dbg !10
// CHECK:STDOUT: %.loc47_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11
// CHECK:STDOUT: call void @_CF.Main.7220df690d061955(ptr %.loc47_5), !dbg !12
// CHECK:STDOUT: call void @_CF.Main.29cf1dfeccef7249(ptr %.loc47_5), !dbg !12
// CHECK:STDOUT: ret void, !dbg !13
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -70,18 +70,18 @@ fn M() {
// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.329e9a7481f16207(ptr %x) #0 !dbg !14 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !14 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !20
// CHECK:STDOUT: call void @_CB.Main.329e9a7481f16207(ptr %x), !dbg !21
// CHECK:STDOUT: call void @_CB.Main.bfb441135f07cbe1(ptr %x), !dbg !21
// CHECK:STDOUT: ret void, !dbg !22
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.7220df690d061955(ptr %x) #0 !dbg !23 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !23 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %A.call = call %type @_CA.Main.582d60b54baf6b63(%type zeroinitializer), !dbg !26
// CHECK:STDOUT: call void @_CB.Main.7220df690d061955(ptr %x), !dbg !27
// CHECK:STDOUT: call void @_CB.Main.29cf1dfeccef7249(ptr %x), !dbg !27
// CHECK:STDOUT: ret void, !dbg !28
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -92,7 +92,7 @@ fn M() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.329e9a7481f16207(ptr %x) #0 !dbg !35 {
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.bfb441135f07cbe1(ptr %x) #0 !dbg !35 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc34_7.3.temp = alloca i32, align 4, !dbg !38
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.3.temp), !dbg !38
@@ -103,7 +103,7 @@ fn M() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.7220df690d061955(ptr %x) #0 !dbg !41 {
// CHECK:STDOUT: define linkonce_odr void @_CB.Main.29cf1dfeccef7249(ptr %x) #0 !dbg !41 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc34_7.3.temp = alloca double, align 8, !dbg !44
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc34_7.3.temp), !dbg !44
@@ -149,7 +149,7 @@ fn M() {
// CHECK:STDOUT: !11 = !DILocation(line: 47, column: 5, scope: !4)
// CHECK:STDOUT: !12 = !DILocation(line: 47, column: 3, scope: !4)
// CHECK:STDOUT: !13 = !DILocation(line: 42, column: 1, scope: !4)
// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.329e9a7481f16207", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18)
// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.bfb441135f07cbe1", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !18)
// CHECK:STDOUT: !15 = !DISubroutineType(types: !16)
// CHECK:STDOUT: !16 = !{null, !17}
// CHECK:STDOUT: !17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 8)
@@ -158,7 +158,7 @@ fn M() {
// CHECK:STDOUT: !20 = !DILocation(line: 38, column: 3, scope: !14)
// CHECK:STDOUT: !21 = !DILocation(line: 39, column: 3, scope: !14)
// CHECK:STDOUT: !22 = !DILocation(line: 37, column: 1, scope: !14)
// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.7220df690d061955", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !24)
// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.29cf1dfeccef7249", scope: null, file: !3, line: 37, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !24)
// CHECK:STDOUT: !24 = !{!25}
// CHECK:STDOUT: !25 = !DILocalVariable(arg: 1, scope: !23, type: !17)
// CHECK:STDOUT: !26 = !DILocation(line: 38, column: 3, scope: !23)
@@ -170,13 +170,13 @@ fn M() {
// CHECK:STDOUT: !32 = !{!33}
// CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !29, type: !17)
// CHECK:STDOUT: !34 = !DILocation(line: 26, column: 3, scope: !29)
// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.329e9a7481f16207", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36)
// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.bfb441135f07cbe1", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !36)
// CHECK:STDOUT: !36 = !{!37}
// CHECK:STDOUT: !37 = !DILocalVariable(arg: 1, scope: !35, type: !17)
// CHECK:STDOUT: !38 = !DILocation(line: 34, column: 3, scope: !35)
// CHECK:STDOUT: !39 = !DILocation(line: 34, column: 5, scope: !35)
// CHECK:STDOUT: !40 = !DILocation(line: 33, column: 1, scope: !35)
// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.7220df690d061955", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !42)
// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.29cf1dfeccef7249", scope: null, file: !3, line: 33, type: !15, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !42)
// CHECK:STDOUT: !42 = !{!43}
// CHECK:STDOUT: !43 = !DILocalVariable(arg: 1, scope: !41, type: !17)
// CHECK:STDOUT: !44 = !DILocation(line: 34, column: 3, scope: !41)
@@ -86,7 +86,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define i32 @_CF_i32.Main(i32 %a) #0 !dbg !11 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %F.call = call i32 @_CF.Main.293bd484ac310f4a(i32 %a), !dbg !14
// CHECK:STDOUT: %F.call = call i32 @_CF.Main.07d7f3268607f0bc(i32 %a), !dbg !14
// CHECK:STDOUT: ret i32 %F.call, !dbg !15
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -107,7 +107,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define void @_CF_X.Main(ptr sret({ i32, i32 }) %return, ptr %a) #0 !dbg !26 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: call void @_CF.Main.194545a981b3d533(ptr %return, ptr %a), !dbg !29
// CHECK:STDOUT: call void @_CF.Main.f2c09195b9db5815(ptr %return, ptr %a), !dbg !29
// CHECK:STDOUT: ret void, !dbg !30
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -120,7 +120,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define void @_CF_empty_tuple.Main() #0 !dbg !35 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: call void @_CF.Main.04f1a9672775845c(), !dbg !36
// CHECK:STDOUT: call void @_CF.Main.94af6b585cb77bfd(), !dbg !36
// CHECK:STDOUT: ret void, !dbg !37
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -141,7 +141,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define void @_CF_two_tuple.Main(ptr sret({ i32, i32 }) %return, ptr %a) #0 !dbg !43 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: call void @_CF.Main.0eee08003d769e16(ptr %return, ptr %a), !dbg !46
// CHECK:STDOUT: call void @_CF.Main.4381e7f8def4ed9d(ptr %return, ptr %a), !dbg !46
// CHECK:STDOUT: ret void, !dbg !47
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -162,12 +162,12 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define void @_CF_nested_tuple.Main(ptr sret({ { i32, i32 }, { i32, i32 } }) %return, ptr %a) #0 !dbg !55 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: call void @_CF.Main.34b59c7c4a928ce4(ptr %return, ptr %a), !dbg !58
// CHECK:STDOUT: call void @_CF.Main.389b355d0ba7c2d7(ptr %return, ptr %a), !dbg !58
// CHECK:STDOUT: ret void, !dbg !59
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr i32 @_CF.Main.293bd484ac310f4a(i32 %a) #0 !dbg !60 {
// CHECK:STDOUT: define linkonce_odr i32 @_CF.Main.07d7f3268607f0bc(i32 %a) #0 !dbg !60 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %_.var = alloca i32, align 4, !dbg !63
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !63
@@ -178,7 +178,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.194545a981b3d533(ptr sret({ i32, i32 }) %return, ptr %a) #0 !dbg !67 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.f2c09195b9db5815(ptr sret({ i32, i32 }) %return, ptr %a) #0 !dbg !67 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %_.var = alloca { i32, i32 }, align 8, !dbg !70
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !70
@@ -188,7 +188,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.04f1a9672775845c() #0 !dbg !74 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.94af6b585cb77bfd() #0 !dbg !74 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %_.var = alloca {}, align 8, !dbg !75
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !75
@@ -198,7 +198,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.0eee08003d769e16(ptr sret({ i32, i32 }) %return, ptr %a) #0 !dbg !79 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.4381e7f8def4ed9d(ptr sret({ i32, i32 }) %return, ptr %a) #0 !dbg !79 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %_.var = alloca { i32, i32 }, align 8, !dbg !82
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !82
@@ -208,7 +208,7 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.34b59c7c4a928ce4(ptr sret({ { i32, i32 }, { i32, i32 } }) %return, ptr %a) #0 !dbg !86 {
// CHECK:STDOUT: define linkonce_odr void @_CF.Main.389b355d0ba7c2d7(ptr sret({ { i32, i32 }, { i32, i32 } }) %return, ptr %a) #0 !dbg !86 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %_.var = alloca { { i32, i32 }, { i32, i32 } }, align 8, !dbg !89
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !89
@@ -289,33 +289,33 @@ fn F_nested_tuple(a: ((i32, i32), X)) -> ((i32, i32), X) {
// CHECK:STDOUT: !57 = !DILocalVariable(arg: 1, scope: !55, type: !19)
// CHECK:STDOUT: !58 = !DILocation(line: 74, column: 10, scope: !55)
// CHECK:STDOUT: !59 = !DILocation(line: 74, column: 3, scope: !55)
// CHECK:STDOUT: !60 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.293bd484ac310f4a", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !61)
// CHECK:STDOUT: !60 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.07d7f3268607f0bc", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !61)
// CHECK:STDOUT: !61 = !{!62}
// CHECK:STDOUT: !62 = !DILocalVariable(arg: 1, scope: !60, type: !7)
// CHECK:STDOUT: !63 = !DILocation(line: 18, column: 3, scope: !60)
// CHECK:STDOUT: !64 = !DILocation(line: 18, column: 14, scope: !60)
// CHECK:STDOUT: !65 = !DILocation(line: 19, column: 10, scope: !60)
// CHECK:STDOUT: !66 = !DILocation(line: 19, column: 3, scope: !60)
// CHECK:STDOUT: !67 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.194545a981b3d533", scope: null, file: !3, line: 17, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !68)
// CHECK:STDOUT: !67 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.f2c09195b9db5815", scope: null, file: !3, line: 17, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !68)
// CHECK:STDOUT: !68 = !{!69}
// CHECK:STDOUT: !69 = !DILocalVariable(arg: 1, scope: !67, type: !19)
// CHECK:STDOUT: !70 = !DILocation(line: 18, column: 3, scope: !67)
// CHECK:STDOUT: !71 = !DILocation(line: 18, column: 14, scope: !67)
// CHECK:STDOUT: !72 = !DILocation(line: 19, column: 10, scope: !67)
// CHECK:STDOUT: !73 = !DILocation(line: 19, column: 3, scope: !67)
// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.04f1a9672775845c", scope: null, file: !3, line: 17, type: !32, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.94af6b585cb77bfd", scope: null, file: !3, line: 17, type: !32, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !75 = !DILocation(line: 18, column: 3, scope: !74)
// CHECK:STDOUT: !76 = !DILocation(line: 18, column: 14, scope: !74)
// CHECK:STDOUT: !77 = !DILocation(line: 19, column: 10, scope: !74)
// CHECK:STDOUT: !78 = !DILocation(line: 19, column: 3, scope: !74)
// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.0eee08003d769e16", scope: null, file: !3, line: 17, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !80)
// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.4381e7f8def4ed9d", scope: null, file: !3, line: 17, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !80)
// CHECK:STDOUT: !80 = !{!81}
// CHECK:STDOUT: !81 = !DILocalVariable(arg: 1, scope: !79, type: !19)
// CHECK:STDOUT: !82 = !DILocation(line: 18, column: 3, scope: !79)
// CHECK:STDOUT: !83 = !DILocation(line: 18, column: 14, scope: !79)
// CHECK:STDOUT: !84 = !DILocation(line: 19, column: 10, scope: !79)
// CHECK:STDOUT: !85 = !DILocation(line: 19, column: 3, scope: !79)
// CHECK:STDOUT: !86 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.34b59c7c4a928ce4", scope: null, file: !3, line: 17, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !87)
// CHECK:STDOUT: !86 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.389b355d0ba7c2d7", scope: null, file: !3, line: 17, type: !17, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !87)
// CHECK:STDOUT: !87 = !{!88}
// CHECK:STDOUT: !88 = !DILocalVariable(arg: 1, scope: !86, type: !19)
// CHECK:STDOUT: !89 = !DILocation(line: 18, column: 3, scope: !86)