Skip ImplWitnessTable::elements_id when generating fingerprints (#7629)

Implementing interface modifiers causes an infinite loop when generating
fingerprints because the witness value generates a fingerprint that's
dependent on something dependent on the witness value. We've debugged
this to the witness table's `elements_id` field.

This hack is a workaround for creating a new block type whose value is
not codependent with its identity.

Co-authored-by: Richard Smith <richard@metafoo.co.uk>

Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
Christopher Di Bella
2026-08-11 22:39:30 +00:00
committed by GitHub
co-authored by Richard Smith
parent cb5e9b6555
commit 4ea5ef45dd
368 changed files with 11718 additions and 11723 deletions
+39 -39
View File
@@ -222,12 +222,12 @@ fn Convert() {
// CHECK:STDOUT: define void @_CPassNonnullPtr.Main(ptr %p) #0 !dbg !19 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc22_15.2.temp = alloca ptr, align 8, !dbg !22
// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.584546da881406f4"(ptr %p), !dbg !22
// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af"(ptr %p), !dbg !22
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc22_15.2.temp), !dbg !22
// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc22_15.2.temp, align 8, !dbg !22
// CHECK:STDOUT: %.loc22_15.4 = load ptr, ptr %.loc22_15.2.temp, align 8, !dbg !22
// CHECK:STDOUT: call void @_Z7TakePtrP1C(ptr %.loc22_15.4), !dbg !23
// CHECK:STDOUT: call void @"_COp.45d383ce33019c14:core.Destroy.Core"(ptr %.loc22_15.2.temp), !dbg !22
// CHECK:STDOUT: call void @"_COp.0e8755a14ff0c1c2:core.Destroy.Core"(ptr %.loc22_15.2.temp), !dbg !22
// CHECK:STDOUT: ret void, !dbg !24
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -246,7 +246,7 @@ fn Convert() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define weak_odr void @"_COp.45d383ce33019c14:core.Destroy.Core"(ptr %self) #0 !dbg !33 {
// CHECK:STDOUT: define weak_odr void @"_COp.0e8755a14ff0c1c2:core.Destroy.Core"(ptr %self) #0 !dbg !33 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: ret void, !dbg !36
// CHECK:STDOUT: }
@@ -270,12 +270,12 @@ fn Convert() {
// CHECK:STDOUT: define void @_CPassNonnullPtrWithThunk.Main(ptr %p) #0 !dbg !46 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: %.loc35_24.2.temp = alloca ptr, align 8, !dbg !49
// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.584546da881406f4"(ptr %p), !dbg !49
// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af"(ptr %p), !dbg !49
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc35_24.2.temp), !dbg !49
// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc35_24.2.temp, align 8, !dbg !49
// CHECK:STDOUT: %.loc35_24.4 = load ptr, ptr %.loc35_24.2.temp, align 8, !dbg !49
// CHECK:STDOUT: call void @_Z16TakePtrWithThunkP1Ci.carbon_thunk._(ptr %.loc35_24.4), !dbg !50
// CHECK:STDOUT: call void @"_COp.45d383ce33019c14:core.Destroy.Core"(ptr %.loc35_24.2.temp), !dbg !49
// CHECK:STDOUT: call void @"_COp.0e8755a14ff0c1c2:core.Destroy.Core"(ptr %.loc35_24.2.temp), !dbg !49
// CHECK:STDOUT: ret void, !dbg !51
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -304,8 +304,8 @@ fn Convert() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.584546da881406f4"(ptr %self) #0 !dbg !58 {
// CHECK:STDOUT: %1 = call ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.cb68282b79f349c7"(ptr %self), !dbg !64
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af"(ptr %self) #0 !dbg !58 {
// CHECK:STDOUT: %1 = call ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.f65d494664285214"(ptr %self), !dbg !64
// CHECK:STDOUT: ret ptr %1, !dbg !65
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -313,13 +313,13 @@ fn Convert() {
// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #3
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.cb68282b79f349c7"(ptr %self) #0 !dbg !66 {
// CHECK:STDOUT: %1 = call ptr @_CSome.Optional.Core.cb68282b79f349c7(ptr %self), !dbg !69
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.f65d494664285214"(ptr %self) #0 !dbg !66 {
// CHECK:STDOUT: %1 = call ptr @_CSome.Optional.Core.f65d494664285214(ptr %self), !dbg !69
// CHECK:STDOUT: ret ptr %1, !dbg !70
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.cb68282b79f349c7(ptr %value) #0 !dbg !71 {
// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.f65d494664285214(ptr %value) #0 !dbg !71 {
// CHECK:STDOUT: %1 = call ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %value), !dbg !74
// CHECK:STDOUT: ret ptr %1, !dbg !75
// CHECK:STDOUT: }
@@ -340,7 +340,7 @@ fn Convert() {
// CHECK:STDOUT: declare noundef ptr @_Z18ReturnPtrWithThunki(i32 noundef) #1
// CHECK:STDOUT:
// CHECK:STDOUT: ; uselistorder directives
// CHECK:STDOUT: uselistorder ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.584546da881406f4", { 1, 0 }
// CHECK:STDOUT: uselistorder ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af", { 1, 0 }
// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 0, 2, 1 }
// CHECK:STDOUT:
// CHECK:STDOUT: attributes #0 = { nounwind }
@@ -385,7 +385,7 @@ fn Convert() {
// CHECK:STDOUT: !30 = !{!31}
// CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !29, type: !15)
// CHECK:STDOUT: !32 = !DILocation(line: 22, column: 15, scope: !29)
// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.45d383ce33019c14:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !34)
// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.0e8755a14ff0c1c2:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !34)
// CHECK:STDOUT: !34 = !{!35}
// CHECK:STDOUT: !35 = !DILocalVariable(arg: 1, scope: !33, type: !15)
// CHECK:STDOUT: !36 = !DILocation(line: 22, column: 15, scope: !33)
@@ -410,7 +410,7 @@ fn Convert() {
// CHECK:STDOUT: !55 = distinct !DISubprogram(name: "ReturnPtrWithThunk", linkageName: "_CReturnPtrWithThunk.Main", scope: null, file: !1, line: 38, type: !38, spFlags: DISPFlagDefinition, unit: !0)
// CHECK:STDOUT: !56 = !DILocation(line: 39, column: 10, scope: !55)
// CHECK:STDOUT: !57 = !DILocation(line: 39, column: 3, scope: !55)
// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.584546da881406f4", scope: null, file: !59, line: 105, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !62)
// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af", scope: null, file: !59, line: 105, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !62)
// CHECK:STDOUT: !59 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "")
// CHECK:STDOUT: !60 = !DISubroutineType(types: !61)
// CHECK:STDOUT: !61 = !{!15, !15}
@@ -418,12 +418,12 @@ fn Convert() {
// CHECK:STDOUT: !63 = !DILocalVariable(arg: 1, scope: !58, type: !15)
// CHECK:STDOUT: !64 = !DILocation(line: 106, column: 12, scope: !58)
// CHECK:STDOUT: !65 = !DILocation(line: 106, column: 5, scope: !58)
// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.cb68282b79f349c7", scope: null, file: !59, line: 80, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !67)
// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.f65d494664285214", scope: null, file: !59, line: 80, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !67)
// CHECK:STDOUT: !67 = !{!68}
// CHECK:STDOUT: !68 = !DILocalVariable(arg: 1, scope: !66, type: !15)
// CHECK:STDOUT: !69 = !DILocation(line: 81, column: 12, scope: !66)
// CHECK:STDOUT: !70 = !DILocation(line: 81, column: 5, scope: !66)
// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.cb68282b79f349c7", scope: null, file: !59, line: 33, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !72)
// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.f65d494664285214", scope: null, file: !59, line: 33, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !72)
// CHECK:STDOUT: !72 = !{!73}
// CHECK:STDOUT: !73 = !DILocalVariable(arg: 1, scope: !71, type: !15)
// CHECK:STDOUT: !74 = !DILocation(line: 34, column: 12, scope: !71)
@@ -451,13 +451,13 @@ fn Convert() {
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc9_21.1.temp), !dbg !15
// CHECK:STDOUT: store ptr %make.call, ptr %.loc9_21.1.temp, align 8, !dbg !15
// CHECK:STDOUT: %.loc9_21.3 = load ptr, ptr %.loc9_21.1.temp, align 8, !dbg !15
// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.df45ad00f0c8a8b1"(ptr %.loc9_21.3), !dbg !15
// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.7a59268f02b553a8"(ptr %.loc9_21.3), !dbg !15
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc9_21.5.temp), !dbg !15
// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc9_21.5.temp, align 8, !dbg !15
// CHECK:STDOUT: %.loc9_21.7 = load ptr, ptr %.loc9_21.5.temp, align 8, !dbg !15
// CHECK:STDOUT: call void @_Z4takePK1C(ptr %.loc9_21.7), !dbg !16
// CHECK:STDOUT: call void @"_COp.4734ec17f811d915:core.Destroy.Core"(ptr %.loc9_21.5.temp), !dbg !15
// CHECK:STDOUT: call void @"_COp.ea48c2a6b4bbf7d4:core.Destroy.Core"(ptr %.loc9_21.1.temp), !dbg !15
// CHECK:STDOUT: call void @"_COp.c188d113b8cbf2db:core.Destroy.Core"(ptr %.loc9_21.5.temp), !dbg !15
// CHECK:STDOUT: call void @"_COp.0e8755a14ff0c1c2:core.Destroy.Core"(ptr %.loc9_21.1.temp), !dbg !15
// CHECK:STDOUT: ret void, !dbg !17
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -478,7 +478,7 @@ fn Convert() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define weak_odr void @"_COp.4734ec17f811d915:core.Destroy.Core"(ptr %self) #0 !dbg !29 {
// CHECK:STDOUT: define weak_odr void @"_COp.c188d113b8cbf2db:core.Destroy.Core"(ptr %self) #0 !dbg !29 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: ret void, !dbg !32
// CHECK:STDOUT: }
@@ -496,7 +496,7 @@ fn Convert() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define weak_odr void @"_COp.ea48c2a6b4bbf7d4:core.Destroy.Core"(ptr %self) #0 !dbg !41 {
// CHECK:STDOUT: define weak_odr void @"_COp.0e8755a14ff0c1c2:core.Destroy.Core"(ptr %self) #0 !dbg !41 {
// CHECK:STDOUT: entry:
// CHECK:STDOUT: ret void, !dbg !44
// CHECK:STDOUT: }
@@ -505,54 +505,54 @@ fn Convert() {
// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #2
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.df45ad00f0c8a8b1"(ptr %self) #0 !dbg !45 {
// CHECK:STDOUT: %1 = call ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.5df907dcfc8a3b68"(ptr %self), !dbg !51
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.7a59268f02b553a8"(ptr %self) #0 !dbg !45 {
// CHECK:STDOUT: %1 = call ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.703e8dd9cedc135a"(ptr %self), !dbg !51
// CHECK:STDOUT: ret ptr %1, !dbg !52
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.5df907dcfc8a3b68"(ptr %self) #0 !dbg !53 {
// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.703e8dd9cedc135a"(ptr %self) #0 !dbg !53 {
// CHECK:STDOUT: %temp = alloca ptr, align 8, !dbg !56
// CHECK:STDOUT: %temp1 = alloca ptr, align 8, !dbg !56
// CHECK:STDOUT: %1 = call i1 @_CHasValue.Optional.Core.32cfe636e1ecfb20(ptr %self), !dbg !57
// CHECK:STDOUT: %1 = call i1 @_CHasValue.Optional.Core.f65d494664285214(ptr %self), !dbg !57
// CHECK:STDOUT: br i1 %1, label %2, label %7, !dbg !58
// CHECK:STDOUT:
// CHECK:STDOUT: 2: ; preds = %0
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %temp), !dbg !56
// CHECK:STDOUT: %3 = call ptr @_CGet.Optional.Core.32cfe636e1ecfb20(ptr %self), !dbg !56
// CHECK:STDOUT: %3 = call ptr @_CGet.Optional.Core.f65d494664285214(ptr %self), !dbg !56
// CHECK:STDOUT: store ptr %3, ptr %temp, align 8, !dbg !56
// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %temp1), !dbg !56
// CHECK:STDOUT: %4 = load ptr, ptr %temp, align 8, !dbg !56
// CHECK:STDOUT: store ptr %4, ptr %temp1, align 8, !dbg !56
// CHECK:STDOUT: %5 = load ptr, ptr %temp1, align 8, !dbg !56
// CHECK:STDOUT: %6 = call ptr @_CSome.Optional.Core.717db3d1619a5b16(ptr %5), !dbg !59
// CHECK:STDOUT: %6 = call ptr @_CSome.Optional.Core.f04d7238fb50aa85(ptr %5), !dbg !59
// CHECK:STDOUT: ret ptr %6, !dbg !60
// CHECK:STDOUT:
// CHECK:STDOUT: 7: ; preds = %0
// CHECK:STDOUT: %8 = call ptr @_CNone.Optional.Core.717db3d1619a5b16(), !dbg !61
// CHECK:STDOUT: %8 = call ptr @_CNone.Optional.Core.f04d7238fb50aa85(), !dbg !61
// CHECK:STDOUT: ret ptr %8, !dbg !62
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr i1 @_CHasValue.Optional.Core.32cfe636e1ecfb20(ptr %self) #0 !dbg !63 {
// CHECK:STDOUT: define linkonce_odr i1 @_CHasValue.Optional.Core.f65d494664285214(ptr %self) #0 !dbg !63 {
// CHECK:STDOUT: %1 = call i1 @"_CHas.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %self), !dbg !66
// CHECK:STDOUT: ret i1 %1, !dbg !67
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @_CGet.Optional.Core.32cfe636e1ecfb20(ptr %self) #0 !dbg !68 {
// CHECK:STDOUT: define linkonce_odr ptr @_CGet.Optional.Core.f65d494664285214(ptr %self) #0 !dbg !68 {
// CHECK:STDOUT: %1 = call ptr @"_CGet.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %self), !dbg !71
// CHECK:STDOUT: ret ptr %1, !dbg !72
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.717db3d1619a5b16(ptr %value) #0 !dbg !73 {
// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.f04d7238fb50aa85(ptr %value) #0 !dbg !73 {
// CHECK:STDOUT: %1 = call ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.8753681fdb639539"(ptr %value), !dbg !76
// CHECK:STDOUT: ret ptr %1, !dbg !77
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: ; Function Attrs: nounwind
// CHECK:STDOUT: define linkonce_odr ptr @_CNone.Optional.Core.717db3d1619a5b16() #0 !dbg !78 {
// CHECK:STDOUT: define linkonce_odr ptr @_CNone.Optional.Core.f04d7238fb50aa85() #0 !dbg !78 {
// CHECK:STDOUT: ret ptr null, !dbg !81
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -619,7 +619,7 @@ fn Convert() {
// CHECK:STDOUT: !26 = !{!27}
// CHECK:STDOUT: !27 = !DILocalVariable(arg: 1, scope: !25, type: !21)
// CHECK:STDOUT: !28 = !DILocation(line: 9, column: 12, scope: !25)
// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "Op", linkageName: "_COp.4734ec17f811d915:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30)
// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "Op", linkageName: "_COp.c188d113b8cbf2db:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30)
// CHECK:STDOUT: !30 = !{!31}
// CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !29, type: !21)
// CHECK:STDOUT: !32 = !DILocation(line: 9, column: 12, scope: !29)
@@ -631,11 +631,11 @@ fn Convert() {
// CHECK:STDOUT: !38 = !{!39}
// CHECK:STDOUT: !39 = !DILocalVariable(arg: 1, scope: !37, type: !21)
// CHECK:STDOUT: !40 = !DILocation(line: 9, column: 12, scope: !37)
// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "Op", linkageName: "_COp.ea48c2a6b4bbf7d4:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !42)
// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "Op", linkageName: "_COp.0e8755a14ff0c1c2:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !42)
// CHECK:STDOUT: !42 = !{!43}
// CHECK:STDOUT: !43 = !DILocalVariable(arg: 1, scope: !41, type: !21)
// CHECK:STDOUT: !44 = !DILocation(line: 9, column: 12, scope: !41)
// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.df45ad00f0c8a8b1", scope: null, file: !46, line: 105, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !49)
// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.7a59268f02b553a8", scope: null, file: !46, line: 105, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !49)
// CHECK:STDOUT: !46 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "")
// CHECK:STDOUT: !47 = !DISubroutineType(types: !48)
// CHECK:STDOUT: !48 = !{!21, !21}
@@ -643,7 +643,7 @@ fn Convert() {
// CHECK:STDOUT: !50 = !DILocalVariable(arg: 1, scope: !45, type: !21)
// CHECK:STDOUT: !51 = !DILocation(line: 106, column: 12, scope: !45)
// CHECK:STDOUT: !52 = !DILocation(line: 106, column: 5, scope: !45)
// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.5df907dcfc8a3b68", scope: null, file: !46, line: 95, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !54)
// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.703e8dd9cedc135a", scope: null, file: !46, line: 95, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !54)
// CHECK:STDOUT: !54 = !{!55}
// CHECK:STDOUT: !55 = !DILocalVariable(arg: 1, scope: !53, type: !21)
// CHECK:STDOUT: !56 = !DILocation(line: 97, column: 31, scope: !53)
@@ -653,22 +653,22 @@ fn Convert() {
// CHECK:STDOUT: !60 = !DILocation(line: 97, column: 7, scope: !53)
// CHECK:STDOUT: !61 = !DILocation(line: 99, column: 12, scope: !53)
// CHECK:STDOUT: !62 = !DILocation(line: 99, column: 5, scope: !53)
// CHECK:STDOUT: !63 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.32cfe636e1ecfb20", scope: null, file: !46, line: 36, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !64)
// CHECK:STDOUT: !63 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.f65d494664285214", scope: null, file: !46, line: 36, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !64)
// CHECK:STDOUT: !64 = !{!65}
// CHECK:STDOUT: !65 = !DILocalVariable(arg: 1, scope: !63, type: !21)
// CHECK:STDOUT: !66 = !DILocation(line: 37, column: 12, scope: !63)
// CHECK:STDOUT: !67 = !DILocation(line: 37, column: 5, scope: !63)
// CHECK:STDOUT: !68 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.32cfe636e1ecfb20", scope: null, file: !46, line: 39, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !69)
// CHECK:STDOUT: !68 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.f65d494664285214", scope: null, file: !46, line: 39, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !69)
// CHECK:STDOUT: !69 = !{!70}
// CHECK:STDOUT: !70 = !DILocalVariable(arg: 1, scope: !68, type: !21)
// CHECK:STDOUT: !71 = !DILocation(line: 40, column: 12, scope: !68)
// CHECK:STDOUT: !72 = !DILocation(line: 40, column: 5, scope: !68)
// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.717db3d1619a5b16", scope: null, file: !46, line: 33, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !74)
// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.f04d7238fb50aa85", scope: null, file: !46, line: 33, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !74)
// CHECK:STDOUT: !74 = !{!75}
// CHECK:STDOUT: !75 = !DILocalVariable(arg: 1, scope: !73, type: !21)
// CHECK:STDOUT: !76 = !DILocation(line: 34, column: 12, scope: !73)
// CHECK:STDOUT: !77 = !DILocation(line: 34, column: 5, scope: !73)
// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.717db3d1619a5b16", scope: null, file: !46, line: 30, type: !79, spFlags: DISPFlagDefinition, unit: !0)
// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.f04d7238fb50aa85", scope: null, file: !46, line: 30, type: !79, spFlags: DISPFlagDefinition, unit: !0)
// CHECK:STDOUT: !79 = !DISubroutineType(types: !80)
// CHECK:STDOUT: !80 = !{!21}
// CHECK:STDOUT: !81 = !DILocation(line: 31, column: 5, scope: !78)