Skip to content

Commit 8779b8f

Browse files
authored
Replace pending generic logic with work stack-based logic (#6404)
This continues work to eliminate pending generics/specifics and get them to be interleaved with instruction imports. I'm trying to use `FinishGenericOrDone` here as a way to help ensure that code correctly handles generics, where the simple alternative would be for each `TryResolveTypedInst` call `SetGenericData` directly (but which might make it easier to call the wrong `ResolveResult` function, and we do need the `GenericId`s to be passed).
1 parent 6c9a581 commit 8779b8f

28 files changed

+1185
-1100
lines changed

toolchain/check/import_ref.cpp

Lines changed: 179 additions & 141 deletions
Large diffs are not rendered by default.

toolchain/check/testdata/basics/raw_sem_ir/one_file.carbon

Lines changed: 690 additions & 643 deletions
Large diffs are not rendered by default.

toolchain/check/testdata/class/generic/adapt.carbon

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -298,11 +298,11 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
298298
// CHECK:STDOUT: %struct_type.x.200: type = struct_type {.x: %T.d9f} [symbolic]
299299
// CHECK:STDOUT: %complete_type.9d1: <witness> = complete_type_witness %struct_type.x.200 [symbolic]
300300
// CHECK:STDOUT: %C.3f0: type = class_type @C, @C(%T.d9f) [symbolic]
301+
// CHECK:STDOUT: %C.elem.d1c: type = unbound_element_type %C.3f0, %T.d9f [symbolic]
302+
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %T.d9f [symbolic]
301303
// CHECK:STDOUT: %C.239: type = class_type @C, @C(%i32) [concrete]
302304
// CHECK:STDOUT: %struct_type.x.767: type = struct_type {.x: %i32} [concrete]
303305
// CHECK:STDOUT: %complete_type.c07: <witness> = complete_type_witness %struct_type.x.767 [concrete]
304-
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %T.d9f [symbolic]
305-
// CHECK:STDOUT: %C.elem.d1c: type = unbound_element_type %C.3f0, %T.d9f [symbolic]
306306
// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete]
307307
// CHECK:STDOUT: %complete_type.f8a: <witness> = complete_type_witness %i32.builtin [concrete]
308308
// CHECK:STDOUT: %C.elem.ed6: type = unbound_element_type %C.239, %i32 [concrete]
@@ -332,10 +332,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
332332
// CHECK:STDOUT: import Core//prelude
333333
// CHECK:STDOUT: import Core//prelude/...
334334
// CHECK:STDOUT: }
335-
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//adapt_specific_type, loc4_9, loaded [symbolic = @C.%T (constants.%T.d9f)]
336335
// CHECK:STDOUT: %Main.import_ref.2c9: <witness> = import_ref Main//adapt_specific_type, loc6_1, loaded [symbolic = @C.%complete_type (constants.%complete_type.9d1)]
337336
// CHECK:STDOUT: %Main.import_ref.034 = import_ref Main//adapt_specific_type, inst{{[0-9A-F]+}} [no loc], unloaded
338337
// CHECK:STDOUT: %Main.import_ref.e9c: @C.%C.elem (%C.elem.d1c) = import_ref Main//adapt_specific_type, loc5_8, loaded [concrete = %.e74]
338+
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//adapt_specific_type, loc4_9, loaded [symbolic = @C.%T (constants.%T.d9f)]
339339
// CHECK:STDOUT: %Main.import_ref.709: <witness> = import_ref Main//adapt_specific_type, loc10_1, loaded [concrete = constants.%complete_type.c07]
340340
// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//adapt_specific_type, inst{{[0-9A-F]+}} [no loc], unloaded
341341
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
@@ -687,11 +687,11 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
687687
// CHECK:STDOUT: %struct_type.x.200: type = struct_type {.x: %T} [symbolic]
688688
// CHECK:STDOUT: %complete_type.9d1: <witness> = complete_type_witness %struct_type.x.200 [symbolic]
689689
// CHECK:STDOUT: %C.3f0: type = class_type @C, @C(%T) [symbolic]
690+
// CHECK:STDOUT: %C.elem.d1c: type = unbound_element_type %C.3f0, %T [symbolic]
691+
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %T [symbolic]
690692
// CHECK:STDOUT: %C.239: type = class_type @C, @C(%i32) [concrete]
691693
// CHECK:STDOUT: %struct_type.x.767: type = struct_type {.x: %i32} [concrete]
692694
// CHECK:STDOUT: %complete_type.c07: <witness> = complete_type_witness %struct_type.x.767 [concrete]
693-
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %T [symbolic]
694-
// CHECK:STDOUT: %C.elem.d1c: type = unbound_element_type %C.3f0, %T [symbolic]
695695
// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete]
696696
// CHECK:STDOUT: %complete_type.f8a: <witness> = complete_type_witness %i32.builtin [concrete]
697697
// CHECK:STDOUT: %C.elem.ed6: type = unbound_element_type %C.239, %i32 [concrete]
@@ -712,10 +712,10 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
712712
// CHECK:STDOUT: import Core//prelude
713713
// CHECK:STDOUT: import Core//prelude/...
714714
// CHECK:STDOUT: }
715-
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//extend_adapt_specific_type_library, loc7_9, loaded [symbolic = @C.%T (constants.%T)]
716715
// CHECK:STDOUT: %Main.import_ref.2c9: <witness> = import_ref Main//extend_adapt_specific_type_library, loc9_1, loaded [symbolic = @C.%complete_type (constants.%complete_type.9d1)]
717716
// CHECK:STDOUT: %Main.import_ref.034 = import_ref Main//extend_adapt_specific_type_library, inst{{[0-9A-F]+}} [no loc], unloaded
718717
// CHECK:STDOUT: %Main.import_ref.e9c: @C.%C.elem (%C.elem.d1c) = import_ref Main//extend_adapt_specific_type_library, loc8_8, loaded [concrete = %.e74]
718+
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//extend_adapt_specific_type_library, loc7_9, loaded [symbolic = @C.%T (constants.%T)]
719719
// CHECK:STDOUT: %Main.import_ref.709: <witness> = import_ref Main//extend_adapt_specific_type_library, loc13_1, loaded [concrete = constants.%complete_type.c07]
720720
// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//extend_adapt_specific_type_library, inst{{[0-9A-F]+}} [no loc], unloaded
721721
// CHECK:STDOUT: %Main.import_ref.19d12e.2: type = import_ref Main//extend_adapt_specific_type_library, loc12_21, loaded [concrete = constants.%C.239]
@@ -982,9 +982,9 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 {
982982
// CHECK:STDOUT: import Core//prelude
983983
// CHECK:STDOUT: import Core//prelude/...
984984
// CHECK:STDOUT: }
985-
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//adapt_generic_type, loc4_15, loaded [symbolic = @Adapter.%T (constants.%T.d9f)]
986985
// CHECK:STDOUT: %Main.import_ref.aa2: <witness> = import_ref Main//adapt_generic_type, loc6_1, loaded [symbolic = @Adapter.%complete_type (constants.%complete_type.2f1)]
987986
// CHECK:STDOUT: %Main.import_ref.452 = import_ref Main//adapt_generic_type, inst{{[0-9A-F]+}} [no loc], unloaded
987+
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//adapt_generic_type, loc4_15, loaded [symbolic = @Adapter.%T (constants.%T.d9f)]
988988
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
989989
// CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type]
990990
// CHECK:STDOUT: %Core.import_ref.d12: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.24b) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.c95)]

toolchain/check/testdata/class/generic/base_is_generic.carbon

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -283,11 +283,11 @@ fn H() {
283283
// CHECK:STDOUT: %struct_type.x.200: type = struct_type {.x: %T.d9f} [symbolic]
284284
// CHECK:STDOUT: %complete_type.9d1: <witness> = complete_type_witness %struct_type.x.200 [symbolic]
285285
// CHECK:STDOUT: %Base.8f3: type = class_type @Base, @Base(%T.d9f) [symbolic]
286+
// CHECK:STDOUT: %Base.elem.e9c: type = unbound_element_type %Base.8f3, %T.d9f [symbolic]
287+
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %T.d9f [symbolic]
286288
// CHECK:STDOUT: %Base.7a8: type = class_type @Base, @Base(%Param) [concrete]
287289
// CHECK:STDOUT: %struct_type.base.8bc: type = struct_type {.base: %Base.7a8} [concrete]
288290
// CHECK:STDOUT: %complete_type.b07: <witness> = complete_type_witness %struct_type.base.8bc [concrete]
289-
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %T.d9f [symbolic]
290-
// CHECK:STDOUT: %Base.elem.e9c: type = unbound_element_type %Base.8f3, %T.d9f [symbolic]
291291
// CHECK:STDOUT: %Base.elem.d1f: type = unbound_element_type %Base.7a8, %Param [concrete]
292292
// CHECK:STDOUT: %struct_type.x.975: type = struct_type {.x: %Param} [concrete]
293293
// CHECK:STDOUT: %complete_type.db3: <witness> = complete_type_witness %struct_type.x.975 [concrete]
@@ -322,10 +322,10 @@ fn H() {
322322
// CHECK:STDOUT: %Main.import_ref.e8d: <witness> = import_ref Main//extend_generic_base, loc10_1, loaded [concrete = constants.%complete_type.09d]
323323
// CHECK:STDOUT: %Main.import_ref.446 = import_ref Main//extend_generic_base, inst{{[0-9A-F]+}} [no loc], unloaded
324324
// CHECK:STDOUT: %Main.import_ref.a92: %Param.elem = import_ref Main//extend_generic_base, loc9_8, loaded [concrete = %.be7]
325-
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//extend_generic_base, loc4_17, loaded [symbolic = @Base.%T (constants.%T.d9f)]
326325
// CHECK:STDOUT: %Main.import_ref.2c9: <witness> = import_ref Main//extend_generic_base, loc6_1, loaded [symbolic = @Base.%complete_type (constants.%complete_type.9d1)]
327326
// CHECK:STDOUT: %Main.import_ref.a14 = import_ref Main//extend_generic_base, inst{{[0-9A-F]+}} [no loc], unloaded
328327
// CHECK:STDOUT: %Main.import_ref.922: @Base.%Base.elem (%Base.elem.e9c) = import_ref Main//extend_generic_base, loc5_8, loaded [concrete = %.b13]
328+
// CHECK:STDOUT: %Main.import_ref.efc: type = import_ref Main//extend_generic_base, loc4_17, loaded [symbolic = @Base.%T (constants.%T.d9f)]
329329
// CHECK:STDOUT: %Main.import_ref.bd0: <witness> = import_ref Main//extend_generic_base, loc14_1, loaded [concrete = constants.%complete_type.b07]
330330
// CHECK:STDOUT: %Main.import_ref.f6c = import_ref Main//extend_generic_base, inst{{[0-9A-F]+}} [no loc], unloaded
331331
// CHECK:STDOUT: %Main.import_ref.d24 = import_ref Main//extend_generic_base, loc13_27, unloaded
@@ -795,17 +795,17 @@ fn H() {
795795
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
796796
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
797797
// CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic]
798+
// CHECK:STDOUT: %X.G.type.89b800.1: type = fn_type @X.G, @X(%U) [symbolic]
799+
// CHECK:STDOUT: %X.G.045884.1: %X.G.type.89b800.1 = struct_value () [symbolic]
800+
// CHECK:STDOUT: %pattern_type.e68: type = pattern_type %U [symbolic]
801+
// CHECK:STDOUT: %X.G.specific_fn.f7a: <specific function> = specific_function %X.G.045884.1, @X.G(%U) [symbolic]
802+
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %U [symbolic]
798803
// CHECK:STDOUT: %X.fa229d.2: type = class_type @X, @X(%T) [symbolic]
799804
// CHECK:STDOUT: %C.3f0: type = class_type @C, @C(%T) [symbolic]
800805
// CHECK:STDOUT: %C.elem.b96: type = unbound_element_type %C.3f0, %X.fa229d.2 [symbolic]
801806
// CHECK:STDOUT: %struct_type.base.b13: type = struct_type {.base: %X.fa229d.2} [symbolic]
802807
// CHECK:STDOUT: %complete_type.b1f: <witness> = complete_type_witness %struct_type.base.b13 [symbolic]
803-
// CHECK:STDOUT: %X.G.type.89b800.1: type = fn_type @X.G, @X(%U) [symbolic]
804-
// CHECK:STDOUT: %X.G.045884.1: %X.G.type.89b800.1 = struct_value () [symbolic]
805-
// CHECK:STDOUT: %pattern_type.e68: type = pattern_type %U [symbolic]
806808
// CHECK:STDOUT: %require_complete.6fb: <witness> = require_complete_type %X.fa229d.2 [symbolic]
807-
// CHECK:STDOUT: %require_complete.4b7: <witness> = require_complete_type %U [symbolic]
808-
// CHECK:STDOUT: %X.G.specific_fn.f7a: <specific function> = specific_function %X.G.045884.1, @X.G(%U) [symbolic]
809809
// CHECK:STDOUT: %X.G.type.89b800.2: type = fn_type @X.G, @X(%T) [symbolic]
810810
// CHECK:STDOUT: %X.G.045884.2: %X.G.type.89b800.2 = struct_value () [symbolic]
811811
// CHECK:STDOUT: %C.98a: type = class_type @C, @C(%i32) [concrete]
@@ -828,16 +828,16 @@ fn H() {
828828
// CHECK:STDOUT: import Core//prelude/...
829829
// CHECK:STDOUT: }
830830
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
831-
// CHECK:STDOUT: %Main.import_ref.efcd44.1: type = import_ref Main//extend_generic_symbolic_base, loc4_14, loaded [symbolic = @X.%U (constants.%U)]
832831
// CHECK:STDOUT: %Main.import_ref.8f2: <witness> = import_ref Main//extend_generic_symbolic_base, loc6_1, loaded [concrete = constants.%complete_type.357]
833832
// CHECK:STDOUT: %Main.import_ref.e14 = import_ref Main//extend_generic_symbolic_base, inst{{[0-9A-F]+}} [no loc], unloaded
834833
// CHECK:STDOUT: %Main.import_ref.e33: @X.%X.G.type (%X.G.type.89b800.1) = import_ref Main//extend_generic_symbolic_base, loc5_15, loaded [symbolic = @X.%X.G (constants.%X.G.045884.1)]
835-
// CHECK:STDOUT: %Main.import_ref.efcd44.2: type = import_ref Main//extend_generic_symbolic_base, loc8_9, loaded [symbolic = @C.%T (constants.%T)]
834+
// CHECK:STDOUT: %Main.import_ref.efcd44.1: type = import_ref Main//extend_generic_symbolic_base, loc4_14, loaded [symbolic = @X.%U (constants.%U)]
835+
// CHECK:STDOUT: %Main.import_ref.efcd44.2: type = import_ref Main//extend_generic_symbolic_base, loc4_14, loaded [symbolic = @X.%U (constants.%U)]
836836
// CHECK:STDOUT: %Main.import_ref.5d2: <witness> = import_ref Main//extend_generic_symbolic_base, loc10_1, loaded [symbolic = @C.%complete_type (constants.%complete_type.b1f)]
837837
// CHECK:STDOUT: %Main.import_ref.034 = import_ref Main//extend_generic_symbolic_base, inst{{[0-9A-F]+}} [no loc], unloaded
838838
// CHECK:STDOUT: %Main.import_ref.55b = import_ref Main//extend_generic_symbolic_base, loc9_20, unloaded
839839
// CHECK:STDOUT: %Main.import_ref.53b70e.2: type = import_ref Main//extend_generic_symbolic_base, loc9_19, loaded [symbolic = @C.%X (constants.%X.fa229d.2)]
840-
// CHECK:STDOUT: %Main.import_ref.efcd44.3: type = import_ref Main//extend_generic_symbolic_base, loc4_14, loaded [symbolic = @X.%U (constants.%U)]
840+
// CHECK:STDOUT: %Main.import_ref.efcd44.3: type = import_ref Main//extend_generic_symbolic_base, loc8_9, loaded [symbolic = @C.%T (constants.%T)]
841841
// CHECK:STDOUT: }
842842
// CHECK:STDOUT:
843843
// CHECK:STDOUT: file {
@@ -853,7 +853,7 @@ fn H() {
853853
// CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] {} {}
854854
// CHECK:STDOUT: }
855855
// CHECK:STDOUT:
856-
// CHECK:STDOUT: generic class @C(imports.%Main.import_ref.efcd44.2: type) [from "extend_generic_symbolic_base.carbon"] {
856+
// CHECK:STDOUT: generic class @C(imports.%Main.import_ref.efcd44.3: type) [from "extend_generic_symbolic_base.carbon"] {
857857
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
858858
// CHECK:STDOUT:
859859
// CHECK:STDOUT: !definition:
@@ -914,7 +914,7 @@ fn H() {
914914
// CHECK:STDOUT: return
915915
// CHECK:STDOUT: }
916916
// CHECK:STDOUT:
917-
// CHECK:STDOUT: generic fn @X.G(imports.%Main.import_ref.efcd44.3: type) [from "extend_generic_symbolic_base.carbon"] {
917+
// CHECK:STDOUT: generic fn @X.G(imports.%Main.import_ref.efcd44.2: type) [from "extend_generic_symbolic_base.carbon"] {
918918
// CHECK:STDOUT: %U: type = symbolic_binding U, 0 [symbolic = %U (constants.%U)]
919919
// CHECK:STDOUT: %pattern_type: type = pattern_type %U [symbolic = %pattern_type (constants.%pattern_type.e68)]
920920
// CHECK:STDOUT:
@@ -935,6 +935,17 @@ fn H() {
935935
// CHECK:STDOUT: %X.G => constants.%X.G.045884.1
936936
// CHECK:STDOUT: }
937937
// CHECK:STDOUT:
938+
// CHECK:STDOUT: specific @X.G(constants.%U) {
939+
// CHECK:STDOUT: %U => constants.%U
940+
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e68
941+
// CHECK:STDOUT:
942+
// CHECK:STDOUT: !definition:
943+
// CHECK:STDOUT: %require_complete => constants.%require_complete.4b7
944+
// CHECK:STDOUT: %X.G.type => constants.%X.G.type.89b800.1
945+
// CHECK:STDOUT: %X.G => constants.%X.G.045884.1
946+
// CHECK:STDOUT: %X.G.specific_fn => constants.%X.G.specific_fn.f7a
947+
// CHECK:STDOUT: }
948+
// CHECK:STDOUT:
938949
// CHECK:STDOUT: specific @X(constants.%T) {
939950
// CHECK:STDOUT: %U => constants.%T
940951
// CHECK:STDOUT:
@@ -947,17 +958,6 @@ fn H() {
947958
// CHECK:STDOUT: %T => constants.%T
948959
// CHECK:STDOUT: }
949960
// CHECK:STDOUT:
950-
// CHECK:STDOUT: specific @X.G(constants.%U) {
951-
// CHECK:STDOUT: %U => constants.%U
952-
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e68
953-
// CHECK:STDOUT:
954-
// CHECK:STDOUT: !definition:
955-
// CHECK:STDOUT: %require_complete => constants.%require_complete.4b7
956-
// CHECK:STDOUT: %X.G.type => constants.%X.G.type.89b800.1
957-
// CHECK:STDOUT: %X.G => constants.%X.G.045884.1
958-
// CHECK:STDOUT: %X.G.specific_fn => constants.%X.G.specific_fn.f7a
959-
// CHECK:STDOUT: }
960-
// CHECK:STDOUT:
961961
// CHECK:STDOUT: specific @C(constants.%i32) {
962962
// CHECK:STDOUT: %T => constants.%i32
963963
// CHECK:STDOUT:

toolchain/check/testdata/class/generic/field.carbon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ fn H(U:! Core.Copy, c: Class(U)) -> U {
6666
// CHECK:STDOUT: %T.417: %Copy.type = symbolic_binding T, 0 [symbolic]
6767
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.417 [symbolic]
6868
// CHECK:STDOUT: %pattern_type.322: type = pattern_type %Copy.type [concrete]
69-
// CHECK:STDOUT: %require_complete.d742dc.1: <witness> = require_complete_type %T.binding.as_type [symbolic]
7069
// CHECK:STDOUT: %Copy.lookup_impl_witness.c42a3d.1: <witness> = lookup_impl_witness %T.417, @Copy [symbolic]
7170
// CHECK:STDOUT: %.a79665.1: type = fn_type_with_self_type %Copy.Op.type, %T.417 [symbolic]
7271
// CHECK:STDOUT: %impl.elem0.fac0be.1: %.a79665.1 = impl_witness_access %Copy.lookup_impl_witness.c42a3d.1, element0 [symbolic]
7372
// CHECK:STDOUT: %specific_impl_fn.103937.1: <specific function> = specific_impl_function %impl.elem0.fac0be.1, @Copy.Op(%T.417) [symbolic]
73+
// CHECK:STDOUT: %require_complete.d742dc.1: <witness> = require_complete_type %T.binding.as_type [symbolic]
7474
// CHECK:STDOUT: %pattern_type.f14b96.2: type = pattern_type %T.binding.as_type [symbolic]
7575
// CHECK:STDOUT: %Copy.impl_witness.fb7: <witness> = impl_witness imports.%Copy.impl_witness_table.b6a, @Int.as.Copy.impl(%int_32) [concrete]
7676
// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.469: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%int_32) [concrete]

0 commit comments

Comments
 (0)