Model the return slot as an output parameter (#4432)

Also fix `Param` insts to have meaningful names in pretty-printing, to
help clarify relationship with return slot.
This commit is contained in:
Geoff Romer
2024-10-23 16:53:34 +00:00
committed by GitHub
parent 5038218cea
commit 9266f867f9
463 changed files with 7401 additions and 4939 deletions
+13 -13
View File
@@ -78,7 +78,7 @@ fn InstanceCallIndirect(p: i32*) {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -105,8 +105,8 @@ fn InstanceCallIndirect(p: i32*) {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc21_23.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc21_23.2: type = converted %int.make_type_32, %.loc21_23.1 [template = i32]
// CHECK:STDOUT: %param: i32 = param runtime_param0
// CHECK:STDOUT: %n: i32 = bind_name n, %param
// CHECK:STDOUT: %n.param: i32 = param runtime_param0
// CHECK:STDOUT: %n: i32 = bind_name n, %n.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %InstanceCall.decl: %InstanceCall.type = fn_decl @InstanceCall [template = constants.%InstanceCall] {
// CHECK:STDOUT: %n.patt: i32 = binding_pattern n
@@ -115,8 +115,8 @@ fn InstanceCallIndirect(p: i32*) {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc25_20.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc25_20.2: type = converted %int.make_type_32, %.loc25_20.1 [template = i32]
// CHECK:STDOUT: %param: i32 = param runtime_param0
// CHECK:STDOUT: %n: i32 = bind_name n, %param
// CHECK:STDOUT: %n.param: i32 = param runtime_param0
// CHECK:STDOUT: %n: i32 = bind_name n, %n.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %NonInstanceCallIndirect.decl: %NonInstanceCallIndirect.type = fn_decl @NonInstanceCallIndirect [template = constants.%NonInstanceCallIndirect] {
// CHECK:STDOUT: %p.patt: %.7 = binding_pattern p
@@ -126,8 +126,8 @@ fn InstanceCallIndirect(p: i32*) {
// CHECK:STDOUT: %.loc29_34.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc29_34.2: type = converted %int.make_type_32, %.loc29_34.1 [template = i32]
// CHECK:STDOUT: %.loc29_34.3: type = ptr_type i32 [template = constants.%.7]
// CHECK:STDOUT: %param: %.7 = param runtime_param0
// CHECK:STDOUT: %p: %.7 = bind_name p, %param
// CHECK:STDOUT: %p.param: %.7 = param runtime_param0
// CHECK:STDOUT: %p: %.7 = bind_name p, %p.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %InstanceCallIndirect.decl: %InstanceCallIndirect.type = fn_decl @InstanceCallIndirect [template = constants.%InstanceCallIndirect] {
// CHECK:STDOUT: %p.patt: %.7 = binding_pattern p
@@ -137,8 +137,8 @@ fn InstanceCallIndirect(p: i32*) {
// CHECK:STDOUT: %.loc33_31.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc33_31.2: type = converted %int.make_type_32, %.loc33_31.1 [template = i32]
// CHECK:STDOUT: %.loc33_31.3: type = ptr_type i32 [template = constants.%.7]
// CHECK:STDOUT: %param: %.7 = param runtime_param0
// CHECK:STDOUT: %p: %.7 = bind_name p, %param
// CHECK:STDOUT: %p.param: %.7 = param runtime_param0
// CHECK:STDOUT: %p: %.7 = bind_name p, %p.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -153,8 +153,8 @@ fn InstanceCallIndirect(p: i32*) {
// CHECK:STDOUT: %Self.ref: %Simple.type = name_ref Self, @Simple.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc13_14.1: type = facet_type_access %Self.ref [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc13_14.2: type = converted %Self.ref, %.loc13_14.1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %param: @G.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @G.1.%Self (%Self) = bind_name self, %param
// CHECK:STDOUT: %self.param: @G.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @G.1.%Self (%Self) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc13: %.4 = assoc_entity element1, %G.decl [template = constants.%.5]
// CHECK:STDOUT:
@@ -174,8 +174,8 @@ fn InstanceCallIndirect(p: i32*) {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc18_14.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc18_14.2: type = converted %int.make_type_32, %.loc18_14.1 [template = i32]
// CHECK:STDOUT: %param: i32 = param runtime_param0
// CHECK:STDOUT: %self: i32 = bind_name self, %param
// CHECK:STDOUT: %self.param: i32 = param runtime_param0
// CHECK:STDOUT: %self: i32 = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc16_20: <witness> = interface_witness (%F.decl, %G.decl) [template = constants.%.6]
// CHECK:STDOUT:
+1 -1
View File
@@ -34,7 +34,7 @@ impl i32 as I;
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
+1 -1
View File
@@ -37,7 +37,7 @@ impl i32 as Empty {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
+2 -2
View File
@@ -72,8 +72,8 @@ fn G(c: C) {
// CHECK:STDOUT: %c.param_patt: %C = param_pattern %c.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref.loc21: type = name_ref C, file.%C.decl [template = constants.%C]
// CHECK:STDOUT: %param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %param
// CHECK:STDOUT: %c.param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %c.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
+7 -7
View File
@@ -53,7 +53,7 @@ fn InstanceCall(n: i32) {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -77,8 +77,8 @@ fn InstanceCall(n: i32) {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc22_20.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc22_20.2: type = converted %int.make_type_32, %.loc22_20.1 [template = i32]
// CHECK:STDOUT: %param: i32 = param runtime_param0
// CHECK:STDOUT: %n: i32 = bind_name n, %param
// CHECK:STDOUT: %n.param: i32 = param runtime_param0
// CHECK:STDOUT: %n: i32 = bind_name n, %n.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -91,8 +91,8 @@ fn InstanceCall(n: i32) {
// CHECK:STDOUT: %Self.ref: %Simple.type = name_ref Self, @Simple.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc12_14.1: type = facet_type_access %Self.ref [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc12_14.2: type = converted %Self.ref, %.loc12_14.1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %param: @G.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @G.1.%Self (%Self) = bind_name self, %param
// CHECK:STDOUT: %self.param: @G.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @G.1.%Self (%Self) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: %.2 = assoc_entity element0, %G.decl [template = constants.%.3]
// CHECK:STDOUT:
@@ -108,8 +108,8 @@ fn InstanceCall(n: i32) {
// CHECK:STDOUT: %self.param_patt: <error> = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Undeclared.ref: <error> = name_ref Undeclared, <error> [template = <error>]
// CHECK:STDOUT: %param: <error> = param runtime_param0
// CHECK:STDOUT: %self: <error> = bind_name self, %param
// CHECK:STDOUT: %self.param: <error> = param runtime_param0
// CHECK:STDOUT: %self: <error> = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc15_20: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -68,8 +68,8 @@ class C {
// CHECK:STDOUT: %T.patt.loc11_28.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc11_28.2 (constants.%T.patt.1)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc11_28.1, runtime_param<invalid> [symbolic = %T.patt.loc11_28.2 (constants.%T.patt.1)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc11_28.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc11_28.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc11_28.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc11_28.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {}
// CHECK:STDOUT: }
@@ -93,8 +93,8 @@ class C {
// CHECK:STDOUT: %x.param_patt: @F.1.%T (%T) = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, @GenericInterface.%T.loc11_28.1 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %param: @F.1.%T (%T) = param runtime_param0
// CHECK:STDOUT: %x: @F.1.%T (%T) = bind_name x, %param
// CHECK:STDOUT: %x.param: @F.1.%T (%T) = param runtime_param0
// CHECK:STDOUT: %x: @F.1.%T (%T) = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12_13.1: @GenericInterface.%.loc12_13.2 (%.2) = assoc_entity element0, %F.decl [symbolic = %.loc12_13.3 (constants.%.3)]
// CHECK:STDOUT:
@@ -121,8 +121,8 @@ class C {
// CHECK:STDOUT: %x.param_patt: @F.2.%T (%T) = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, @impl.%T.loc19_23.1 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %param: @F.2.%T (%T) = param runtime_param0
// CHECK:STDOUT: %x: @F.2.%T (%T) = bind_name x, %param
// CHECK:STDOUT: %x.param: @F.2.%T (%T) = param runtime_param0
// CHECK:STDOUT: %x: @F.2.%T (%T) = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19_56.1: <witness> = interface_witness (%F.decl) [symbolic = %.loc19_56.2 (constants.%.4)]
// CHECK:STDOUT:
@@ -141,8 +141,8 @@ class C {
// CHECK:STDOUT: %GenericInterface.ref: %GenericInterface.type.1 = name_ref GenericInterface, file.%GenericInterface.decl [template = constants.%GenericInterface]
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc19_23.1 [symbolic = %T.loc19_23.2 (constants.%T)]
// CHECK:STDOUT: %GenericInterface.type.loc19_52.1: type = interface_type @GenericInterface, @GenericInterface(constants.%T) [symbolic = %GenericInterface.type.loc19_52.2 (constants.%GenericInterface.type.2)]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc19_23.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc19_23.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc19_23.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc19_23.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc22: <witness> = complete_type_witness %.5 [template = constants.%.6]
// CHECK:STDOUT:
@@ -38,7 +38,7 @@ extend impl i32 as I {}
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -67,7 +67,7 @@ class E {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -38,7 +38,7 @@ class C {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -39,7 +39,7 @@ impl bool as I {}
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Bool.type = import_ref Core//prelude/types/bool, inst+2, loaded [template = constants.%Bool]
// CHECK:STDOUT: %import_ref: %Bool.type = import_ref Core//prelude/types/bool, inst+5, loaded [template = constants.%Bool]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
+86 -52
View File
@@ -314,8 +314,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref.1: %Bool.type = import_ref Core//prelude/types/bool, inst+2, loaded [template = constants.%Bool]
// CHECK:STDOUT: %import_ref.2: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref.1: %Bool.type = import_ref Core//prelude/types/bool, inst+5, loaded [template = constants.%Bool]
// CHECK:STDOUT: %import_ref.2: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -381,6 +381,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %self.param_patt: bool = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %b.patt: bool = binding_pattern b
// CHECK:STDOUT: %b.param_patt: bool = param_pattern %b.patt, runtime_param1
// CHECK:STDOUT: %return.patt: bool = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: bool = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %bool.make_type.loc93_26: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc93_26.1: type = value_of_initializer %bool.make_type.loc93_26 [template = bool]
@@ -391,11 +393,12 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type.loc93_44: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc93_44.1: type = value_of_initializer %bool.make_type.loc93_44 [template = bool]
// CHECK:STDOUT: %.loc93_44.2: type = converted %bool.make_type.loc93_44, %.loc93_44.1 [template = bool]
// CHECK:STDOUT: %return: ref bool = var <return slot>
// CHECK:STDOUT: %param.loc93_24: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %param.loc93_24
// CHECK:STDOUT: %param.loc93_33: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %param.loc93_33
// CHECK:STDOUT: %self.param: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %self.param
// CHECK:STDOUT: %b.param: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %b.param
// CHECK:STDOUT: %return.param: bool = param runtime_param2
// CHECK:STDOUT: %return: ref bool = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc93: %.6 = assoc_entity element0, %F.decl [template = constants.%.7]
// CHECK:STDOUT:
@@ -410,6 +413,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %F.decl: %F.type.13 = fn_decl @F.13 [template = constants.%F.14] {
// CHECK:STDOUT: %x.patt: @F.13.%.loc188_38.1 (%.11) = binding_pattern x
// CHECK:STDOUT: %x.param_patt: @F.13.%.loc188_38.1 (%.11) = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: %return.patt: @F.13.%.loc188_52.1 (%.13) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @F.13.%.loc188_52.1 (%.13) = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref.loc188_12: %SelfNested.type = name_ref Self, @SelfNested.%Self [symbolic = %Self (constants.%Self.3)]
// CHECK:STDOUT: %.loc188_16.2: type = facet_type_access %Self.ref.loc188_12 [symbolic = %Self (constants.%Self.3)]
@@ -429,9 +434,10 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %.loc188_45.1: type = facet_type_access %Self.ref.loc188_45 [symbolic = %Self (constants.%Self.3)]
// CHECK:STDOUT: %.loc188_45.2: type = converted %Self.ref.loc188_45, %.loc188_45.1 [symbolic = %Self (constants.%Self.3)]
// CHECK:STDOUT: %.loc188_52.2: type = array_type %.loc188_51, %Self.3 [symbolic = %.loc188_52.1 (constants.%.13)]
// CHECK:STDOUT: %return: ref @F.13.%.loc188_52.1 (%.13) = var <return slot>
// CHECK:STDOUT: %param: @F.13.%.loc188_38.1 (%.11) = param runtime_param0
// CHECK:STDOUT: %x: @F.13.%.loc188_38.1 (%.11) = bind_name x, %param
// CHECK:STDOUT: %x.param: @F.13.%.loc188_38.1 (%.11) = param runtime_param0
// CHECK:STDOUT: %x: @F.13.%.loc188_38.1 (%.11) = bind_name x, %x.param
// CHECK:STDOUT: %return.param: @F.13.%.loc188_52.1 (%.13) = param runtime_param1
// CHECK:STDOUT: %return: ref @F.13.%.loc188_52.1 (%.13) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc188: %.14 = assoc_entity element0, %F.decl [template = constants.%.15]
// CHECK:STDOUT:
@@ -475,8 +481,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc62_13.1: type = value_of_initializer %bool.make_type [template = bool]
// CHECK:STDOUT: %.loc62_13.2: type = converted %bool.make_type, %.loc62_13.1 [template = bool]
// CHECK:STDOUT: %param: bool = param runtime_param0
// CHECK:STDOUT: %b: bool = bind_name b, %param
// CHECK:STDOUT: %b.param: bool = param runtime_param0
// CHECK:STDOUT: %b: bool = bind_name b, %b.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc54: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -491,8 +497,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %self.param_patt: %FExtraImplicitParam = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FExtraImplicitParam [template = constants.%FExtraImplicitParam]
// CHECK:STDOUT: %param: %FExtraImplicitParam = param runtime_param0
// CHECK:STDOUT: %self: %FExtraImplicitParam = bind_name self, %param
// CHECK:STDOUT: %self.param: %FExtraImplicitParam = param runtime_param0
// CHECK:STDOUT: %self: %FExtraImplicitParam = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc67: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -502,11 +508,15 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: impl @impl.6: %Self.ref as %I.ref {
// CHECK:STDOUT: %F.decl: %F.type.4 = fn_decl @F.4 [template = constants.%F.5] {} {
// CHECK:STDOUT: %F.decl: %F.type.4 = fn_decl @F.4 [template = constants.%F.5] {
// CHECK:STDOUT: %return.patt: bool = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: bool = param_pattern %return.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc89_15.1: type = value_of_initializer %bool.make_type [template = bool]
// CHECK:STDOUT: %.loc89_15.2: type = converted %bool.make_type, %.loc89_15.1 [template = bool]
// CHECK:STDOUT: %return: ref bool = var <return slot>
// CHECK:STDOUT: %return.param: bool = param runtime_param0
// CHECK:STDOUT: %return: ref bool = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc81: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -519,6 +529,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %F.decl: %F.type.6 = fn_decl @F.6 [template = constants.%F.7] {
// CHECK:STDOUT: %self.patt: bool = binding_pattern self
// CHECK:STDOUT: %self.param_patt: bool = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %return.patt: bool = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: bool = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %bool.make_type.loc104_16: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc104_16.1: type = value_of_initializer %bool.make_type.loc104_16 [template = bool]
@@ -526,9 +538,10 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type.loc104_27: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc104_27.1: type = value_of_initializer %bool.make_type.loc104_27 [template = bool]
// CHECK:STDOUT: %.loc104_27.2: type = converted %bool.make_type.loc104_27, %.loc104_27.1 [template = bool]
// CHECK:STDOUT: %return: ref bool = var <return slot>
// CHECK:STDOUT: %param: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %param
// CHECK:STDOUT: %self.param: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %self.param
// CHECK:STDOUT: %return.param: bool = param runtime_param1
// CHECK:STDOUT: %return: ref bool = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc96: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -541,6 +554,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %F.decl: %F.type.7 = fn_decl @F.7 [template = constants.%F.8] {
// CHECK:STDOUT: %b.patt: bool = binding_pattern b
// CHECK:STDOUT: %b.param_patt: bool = param_pattern %b.patt, runtime_param0
// CHECK:STDOUT: %return.patt: bool = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: bool = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %bool.make_type.loc117_13: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc117_13.1: type = value_of_initializer %bool.make_type.loc117_13 [template = bool]
@@ -548,9 +563,10 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type.loc117_22: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc117_22.1: type = value_of_initializer %bool.make_type.loc117_22 [template = bool]
// CHECK:STDOUT: %.loc117_22.2: type = converted %bool.make_type.loc117_22, %.loc117_22.1 [template = bool]
// CHECK:STDOUT: %return: ref bool = var <return slot>
// CHECK:STDOUT: %param: bool = param runtime_param0
// CHECK:STDOUT: %b: bool = bind_name b, %param
// CHECK:STDOUT: %b.param: bool = param runtime_param0
// CHECK:STDOUT: %b: bool = bind_name b, %b.param
// CHECK:STDOUT: %return.param: bool = param runtime_param1
// CHECK:STDOUT: %return: ref bool = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc109: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -572,10 +588,10 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type.loc130_25: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc130_25.1: type = value_of_initializer %bool.make_type.loc130_25 [template = bool]
// CHECK:STDOUT: %.loc130_25.2: type = converted %bool.make_type.loc130_25, %.loc130_25.1 [template = bool]
// CHECK:STDOUT: %param.loc130_14: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %param.loc130_14
// CHECK:STDOUT: %param.loc130_23: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %param.loc130_23
// CHECK:STDOUT: %self.param: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %self.param
// CHECK:STDOUT: %b.param: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %b.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc122: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -590,6 +606,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %self.param_patt: bool = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %b.patt: %FDifferentParamType = binding_pattern b
// CHECK:STDOUT: %b.param_patt: %FDifferentParamType = param_pattern %b.patt, runtime_param1
// CHECK:STDOUT: %return.patt: bool = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: bool = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %bool.make_type.loc143_16: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc143_16.1: type = value_of_initializer %bool.make_type.loc143_16 [template = bool]
@@ -598,11 +616,12 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type.loc143_34: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc143_34.1: type = value_of_initializer %bool.make_type.loc143_34 [template = bool]
// CHECK:STDOUT: %.loc143_34.2: type = converted %bool.make_type.loc143_34, %.loc143_34.1 [template = bool]
// CHECK:STDOUT: %return: ref bool = var <return slot>
// CHECK:STDOUT: %param.loc143_14: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %param.loc143_14
// CHECK:STDOUT: %param.loc143_23: %FDifferentParamType = param runtime_param1
// CHECK:STDOUT: %b: %FDifferentParamType = bind_name b, %param.loc143_23
// CHECK:STDOUT: %self.param: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %self.param
// CHECK:STDOUT: %b.param: %FDifferentParamType = param runtime_param1
// CHECK:STDOUT: %b: %FDifferentParamType = bind_name b, %b.param
// CHECK:STDOUT: %return.param: bool = param runtime_param2
// CHECK:STDOUT: %return: ref bool = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc135: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -617,6 +636,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %self.param_patt: %FDifferentImplicitParamType = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %b.patt: bool = binding_pattern b
// CHECK:STDOUT: %b.param_patt: bool = param_pattern %b.patt, runtime_param1
// CHECK:STDOUT: %return.patt: bool = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: bool = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentImplicitParamType [template = constants.%FDifferentImplicitParamType]
// CHECK:STDOUT: %bool.make_type.loc156_25: init type = call constants.%Bool() [template = bool]
@@ -625,11 +646,12 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type.loc156_34: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc156_34.1: type = value_of_initializer %bool.make_type.loc156_34 [template = bool]
// CHECK:STDOUT: %.loc156_34.2: type = converted %bool.make_type.loc156_34, %.loc156_34.1 [template = bool]
// CHECK:STDOUT: %return: ref bool = var <return slot>
// CHECK:STDOUT: %param.loc156_14: %FDifferentImplicitParamType = param runtime_param0
// CHECK:STDOUT: %self: %FDifferentImplicitParamType = bind_name self, %param.loc156_14
// CHECK:STDOUT: %param.loc156_23: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %param.loc156_23
// CHECK:STDOUT: %self.param: %FDifferentImplicitParamType = param runtime_param0
// CHECK:STDOUT: %self: %FDifferentImplicitParamType = bind_name self, %self.param
// CHECK:STDOUT: %b.param: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %b.param
// CHECK:STDOUT: %return.param: bool = param runtime_param2
// CHECK:STDOUT: %return: ref bool = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc148: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -644,6 +666,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %self.param_patt: bool = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %b.patt: bool = binding_pattern b
// CHECK:STDOUT: %b.param_patt: bool = param_pattern %b.patt, runtime_param1
// CHECK:STDOUT: %return.patt: %FDifferentReturnType = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %FDifferentReturnType = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %bool.make_type.loc169_16: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc169_16.1: type = value_of_initializer %bool.make_type.loc169_16 [template = bool]
@@ -652,11 +676,12 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %.loc169_25.1: type = value_of_initializer %bool.make_type.loc169_25 [template = bool]
// CHECK:STDOUT: %.loc169_25.2: type = converted %bool.make_type.loc169_25, %.loc169_25.1 [template = bool]
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%FDifferentReturnType [template = constants.%FDifferentReturnType]
// CHECK:STDOUT: %return: ref %FDifferentReturnType = var <return slot>
// CHECK:STDOUT: %param.loc169_14: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %param.loc169_14
// CHECK:STDOUT: %param.loc169_23: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %param.loc169_23
// CHECK:STDOUT: %self.param: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %self.param
// CHECK:STDOUT: %b.param: bool = param runtime_param1
// CHECK:STDOUT: %b: bool = bind_name b, %b.param
// CHECK:STDOUT: %return.param: %FDifferentReturnType = param runtime_param2
// CHECK:STDOUT: %return: ref %FDifferentReturnType = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc161: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -671,6 +696,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %self.param_patt: bool = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %not_b.patt: bool = binding_pattern not_b
// CHECK:STDOUT: %not_b.param_patt: bool = param_pattern %not_b.patt, runtime_param1
// CHECK:STDOUT: %return.patt: bool = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: bool = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %bool.make_type.loc183_16: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc183_16.1: type = value_of_initializer %bool.make_type.loc183_16 [template = bool]
@@ -681,11 +708,12 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %bool.make_type.loc183_38: init type = call constants.%Bool() [template = bool]
// CHECK:STDOUT: %.loc183_38.1: type = value_of_initializer %bool.make_type.loc183_38 [template = bool]
// CHECK:STDOUT: %.loc183_38.2: type = converted %bool.make_type.loc183_38, %.loc183_38.1 [template = bool]
// CHECK:STDOUT: %return: ref bool = var <return slot>
// CHECK:STDOUT: %param.loc183_14: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %param.loc183_14
// CHECK:STDOUT: %param.loc183_27: bool = param runtime_param1
// CHECK:STDOUT: %not_b: bool = bind_name not_b, %param.loc183_27
// CHECK:STDOUT: %self.param: bool = param runtime_param0
// CHECK:STDOUT: %self: bool = bind_name self, %self.param
// CHECK:STDOUT: %not_b.param: bool = param runtime_param1
// CHECK:STDOUT: %not_b: bool = bind_name not_b, %not_b.param
// CHECK:STDOUT: %return.param: bool = param runtime_param2
// CHECK:STDOUT: %return: ref bool = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc175: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -698,6 +726,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %F.decl: %F.type.14 = fn_decl @F.14 [template = constants.%F.15] {
// CHECK:STDOUT: %x.patt: %.18 = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %.18 = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: %return.patt: %.19 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %.19 = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %SelfNestedBadParam.ref.loc200_14: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [template = constants.%SelfNestedBadParam]
// CHECK:STDOUT: %.loc200_32: type = ptr_type %SelfNestedBadParam [template = constants.%.16]
@@ -713,9 +743,10 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %SelfNestedBadParam.ref.loc200_60: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [template = constants.%SelfNestedBadParam]
// CHECK:STDOUT: %.loc200_80: i32 = int_literal 4 [template = constants.%.12]
// CHECK:STDOUT: %.loc200_81: type = array_type %.loc200_80, %SelfNestedBadParam [template = constants.%.19]
// CHECK:STDOUT: %return: ref %.19 = var <return slot>
// CHECK:STDOUT: %param: %.18 = param runtime_param0
// CHECK:STDOUT: %x: %.18 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.18 = param runtime_param0
// CHECK:STDOUT: %x: %.18 = bind_name x, %x.param
// CHECK:STDOUT: %return.param: %.19 = param runtime_param1
// CHECK:STDOUT: %return: ref %.19 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc192: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -728,6 +759,8 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %F.decl: %F.type.15 = fn_decl @F.15 [template = constants.%F.16] {
// CHECK:STDOUT: %x.patt: %.24 = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %.24 = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: %return.patt: %.19 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %.19 = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %SelfNestedBadReturnType.ref.loc212_14: type = name_ref SelfNestedBadReturnType, file.%SelfNestedBadReturnType.decl [template = constants.%SelfNestedBadReturnType]
// CHECK:STDOUT: %.loc212_37: type = ptr_type %SelfNestedBadReturnType [template = constants.%.22]
@@ -741,9 +774,10 @@ class SelfNestedBadReturnType {
// CHECK:STDOUT: %SelfNestedBadParam.ref: type = name_ref SelfNestedBadParam, file.%SelfNestedBadParam.decl [template = constants.%SelfNestedBadParam]
// CHECK:STDOUT: %.loc212_105: i32 = int_literal 4 [template = constants.%.12]
// CHECK:STDOUT: %.loc212_106: type = array_type %.loc212_105, %SelfNestedBadParam [template = constants.%.19]
// CHECK:STDOUT: %return: ref %.19 = var <return slot>
// CHECK:STDOUT: %param: %.24 = param runtime_param0
// CHECK:STDOUT: %x: %.24 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.24 = param runtime_param0
// CHECK:STDOUT: %x: %.24 = bind_name x, %x.param
// CHECK:STDOUT: %return.param: %.19 = param runtime_param1
// CHECK:STDOUT: %return: ref %.19 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc205: <witness> = interface_witness (<error>) [template = <error>]
// CHECK:STDOUT:
@@ -59,13 +59,13 @@ impl i32 as false {}
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref.1: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref.2: %ImplicitAs.type.1 = import_ref Core//prelude/operators/as, inst+46, loaded [template = constants.%ImplicitAs]
// CHECK:STDOUT: %import_ref.3 = import_ref Core//prelude/operators/as, inst+52, unloaded
// CHECK:STDOUT: %import_ref.4: @ImplicitAs.%.1 (%.3) = import_ref Core//prelude/operators/as, inst+71, loaded [symbolic = @ImplicitAs.%.2 (constants.%.7)]
// CHECK:STDOUT: %import_ref.5 = import_ref Core//prelude/operators/as, inst+64, unloaded
// CHECK:STDOUT: %import_ref.6 = import_ref Core//prelude/operators/as, inst+64, unloaded
// CHECK:STDOUT: %import_ref.7 = import_ref Core//prelude/operators/as, inst+64, unloaded
// CHECK:STDOUT: %import_ref.1: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref.2: %ImplicitAs.type.1 = import_ref Core//prelude/operators/as, inst+49, loaded [template = constants.%ImplicitAs]
// CHECK:STDOUT: %import_ref.3 = import_ref Core//prelude/operators/as, inst+55, unloaded
// CHECK:STDOUT: %import_ref.4: @ImplicitAs.%.1 (%.3) = import_ref Core//prelude/operators/as, inst+77, loaded [symbolic = @ImplicitAs.%.2 (constants.%.7)]
// CHECK:STDOUT: %import_ref.5 = import_ref Core//prelude/operators/as, inst+70, unloaded
// CHECK:STDOUT: %import_ref.6 = import_ref Core//prelude/operators/as, inst+70, unloaded
// CHECK:STDOUT: %import_ref.7 = import_ref Core//prelude/operators/as, inst+70, unloaded
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
+1 -1
View File
@@ -43,7 +43,7 @@ impl i32 as I {}
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -65,13 +65,13 @@ impl bool as I where .T = bool {}
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref.1: %Bool.type = import_ref Core//prelude/types/bool, inst+2, loaded [template = constants.%Bool]
// CHECK:STDOUT: %import_ref.2: %ImplicitAs.type.1 = import_ref Core//prelude/operators/as, inst+46, loaded [template = constants.%ImplicitAs]
// CHECK:STDOUT: %import_ref.3 = import_ref Core//prelude/operators/as, inst+52, unloaded
// CHECK:STDOUT: %import_ref.4: @ImplicitAs.%.1 (%.4) = import_ref Core//prelude/operators/as, inst+71, loaded [symbolic = @ImplicitAs.%.2 (constants.%.8)]
// CHECK:STDOUT: %import_ref.5 = import_ref Core//prelude/operators/as, inst+64, unloaded
// CHECK:STDOUT: %import_ref.6 = import_ref Core//prelude/operators/as, inst+64, unloaded
// CHECK:STDOUT: %import_ref.7 = import_ref Core//prelude/operators/as, inst+64, unloaded
// CHECK:STDOUT: %import_ref.1: %Bool.type = import_ref Core//prelude/types/bool, inst+5, loaded [template = constants.%Bool]
// CHECK:STDOUT: %import_ref.2: %ImplicitAs.type.1 = import_ref Core//prelude/operators/as, inst+49, loaded [template = constants.%ImplicitAs]
// CHECK:STDOUT: %import_ref.3 = import_ref Core//prelude/operators/as, inst+55, unloaded
// CHECK:STDOUT: %import_ref.4: @ImplicitAs.%.1 (%.4) = import_ref Core//prelude/operators/as, inst+77, loaded [symbolic = @ImplicitAs.%.2 (constants.%.8)]
// CHECK:STDOUT: %import_ref.5 = import_ref Core//prelude/operators/as, inst+70, unloaded
// CHECK:STDOUT: %import_ref.6 = import_ref Core//prelude/operators/as, inst+70, unloaded
// CHECK:STDOUT: %import_ref.7 = import_ref Core//prelude/operators/as, inst+70, unloaded
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
+2 -2
View File
@@ -59,8 +59,8 @@ impl forall [T:! type] T as Simple {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc15_14.1 [symbolic = %T.loc15_14.2 (constants.%T)]
// CHECK:STDOUT: %Simple.ref: type = name_ref Simple, file.%Simple.decl [template = constants.%Simple.type]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc15_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc15_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc15_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc15_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
+2 -2
View File
@@ -78,8 +78,8 @@ fn G(c: C) {
// CHECK:STDOUT: %c.param_patt: %C = param_pattern %c.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref.loc23: type = name_ref C, file.%C.decl [template = constants.%C]
// CHECK:STDOUT: %param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %param
// CHECK:STDOUT: %c.param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %c.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -74,8 +74,8 @@ fn F(c: C) {
// CHECK:STDOUT: %c.param_patt: %C = param_pattern %c.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref.loc19: type = name_ref C, file.%C.decl [template = constants.%C]
// CHECK:STDOUT: %param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %param
// CHECK:STDOUT: %c.param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %c.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -63,7 +63,7 @@ impl C as I {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -76,11 +76,15 @@ impl C as I {
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %I.decl: type = interface_decl @I [template = constants.%I.type] {} {}
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {}
// CHECK:STDOUT: %F.decl: %F.type.2 = fn_decl @F.2 [template = constants.%F.2] {} {
// CHECK:STDOUT: %F.decl: %F.type.2 = fn_decl @F.2 [template = constants.%F.2] {
// CHECK:STDOUT: %return.patt: i32 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: i32 = param_pattern %return.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc19_11.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc19_11.2: type = converted %int.make_type_32, %.loc19_11.1 [template = i32]
// CHECK:STDOUT: %return: ref i32 = var <return slot>
// CHECK:STDOUT: %return.param: i32 = param runtime_param0
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.2 [template] {} {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
+48 -39
View File
@@ -172,8 +172,8 @@ fn G(x: A) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [template = constants.%HasF.type]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
// CHECK:STDOUT: %x.patt: %.5 = binding_pattern x
@@ -181,8 +181,8 @@ fn G(x: A) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc12_10.1: %.5 = struct_literal ()
// CHECK:STDOUT: %.loc12_10.2: type = converted %.loc12_10.1, constants.%.5 [template = constants.%.5]
// CHECK:STDOUT: %param: %.5 = param runtime_param0
// CHECK:STDOUT: %x: %.5 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.5 = param runtime_param0
// CHECK:STDOUT: %x: %.5 = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -327,20 +327,23 @@ fn G(x: A) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [template = constants.%HasF.type]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
// CHECK:STDOUT: %x.patt: %.5 = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %.5 = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: %return.patt: %.5 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %.5 = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc12_10.1: %.5 = struct_literal ()
// CHECK:STDOUT: %.loc12_10.2: type = converted %.loc12_10.1, constants.%.5 [template = constants.%.5]
// CHECK:STDOUT: %.loc12_17.1: %.5 = struct_literal ()
// CHECK:STDOUT: %.loc12_17.2: type = converted %.loc12_17.1, constants.%.5 [template = constants.%.5]
// CHECK:STDOUT: %return: ref %.5 = var <return slot>
// CHECK:STDOUT: %param: %.5 = param runtime_param0
// CHECK:STDOUT: %x: %.5 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.5 = param runtime_param0
// CHECK:STDOUT: %x: %.5 = bind_name x, %x.param
// CHECK:STDOUT: %return.param: %.5 = param runtime_param1
// CHECK:STDOUT: %return: ref %.5 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -349,6 +352,8 @@ fn G(x: A) {
// CHECK:STDOUT: %F.decl: %F.type.1 = fn_decl @F.1 [template = constants.%F.1] {
// CHECK:STDOUT: %self.patt: @F.1.%Self (%Self) = binding_pattern self
// CHECK:STDOUT: %self.param_patt: @F.1.%Self (%Self) = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %return.patt: @F.1.%Self (%Self) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @F.1.%Self (%Self) = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref.loc5_14: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc5_14.1: type = facet_type_access %Self.ref.loc5_14 [symbolic = %Self (constants.%Self)]
@@ -356,9 +361,10 @@ fn G(x: A) {
// CHECK:STDOUT: %Self.ref.loc5_25: %HasF.type = name_ref Self, @HasF.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc5_25.1: type = facet_type_access %Self.ref.loc5_25 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc5_25.2: type = converted %Self.ref.loc5_25, %.loc5_25.1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %return: ref @F.1.%Self (%Self) = var <return slot>
// CHECK:STDOUT: %param: @F.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self) = bind_name self, %param
// CHECK:STDOUT: %self.param: @F.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: @F.1.%Self (%Self) = param runtime_param1
// CHECK:STDOUT: %return: ref @F.1.%Self (%Self) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: %.2 = assoc_entity element0, %F.decl [template = constants.%.3]
// CHECK:STDOUT:
@@ -381,12 +387,15 @@ fn G(x: A) {
// CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.2) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.2)] {
// CHECK:STDOUT: %self.patt: @F.2.%T (%T) = binding_pattern self
// CHECK:STDOUT: %self.param_patt: @F.2.%T (%T) = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %return.patt: @F.2.%T (%T) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @F.2.%T (%T) = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%T.ref [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %T.ref: type = name_ref T, @impl.%T.loc8_14.1 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %return: ref @F.2.%T (%T) = var <return slot>
// CHECK:STDOUT: %param: @F.2.%T (%T) = param runtime_param0
// CHECK:STDOUT: %self: @F.2.%T (%T) = bind_name self, %param
// CHECK:STDOUT: %self.param: @F.2.%T (%T) = param runtime_param0
// CHECK:STDOUT: %self: @F.2.%T (%T) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: @F.2.%T (%T) = param runtime_param1
// CHECK:STDOUT: %return: ref @F.2.%T (%T) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc8_34.1: <witness> = interface_witness (%F.decl) [symbolic = %.loc8_34.2 (constants.%.4)]
// CHECK:STDOUT:
@@ -530,8 +539,8 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc8_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_9.2 (constants.%T.patt.1)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc8_9.1, runtime_param<invalid> [symbolic = %T.patt.loc8_9.2 (constants.%T.patt.1)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_9.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc8_9.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_9.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_9.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl [template] {
// CHECK:STDOUT: %T.patt.loc10_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc10_14.2 (constants.%T.patt.2)]
@@ -541,8 +550,8 @@ fn G(x: A) {
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc10_14.1 [symbolic = %T.loc10_14.2 (constants.%T)]
// CHECK:STDOUT: %C.loc10_25.1: type = class_type @C, @C(constants.%T) [symbolic = %C.loc10_25.2 (constants.%C.2)]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [template = constants.%HasF.type]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc10_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc10_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc10_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc10_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
// CHECK:STDOUT: %x.patt: %C.3 = binding_pattern x
@@ -552,8 +561,8 @@ fn G(x: A) {
// CHECK:STDOUT: %.loc14_12: %.4 = struct_literal ()
// CHECK:STDOUT: %.loc14_10: type = converted %.loc14_12, constants.%.4 [template = constants.%.4]
// CHECK:STDOUT: %C: type = class_type @C, @C(constants.%.4) [template = constants.%C.3]
// CHECK:STDOUT: %param: %C.3 = param runtime_param0
// CHECK:STDOUT: %x: %C.3 = bind_name x, %param
// CHECK:STDOUT: %x.param: %C.3 = param runtime_param0
// CHECK:STDOUT: %x: %C.3 = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -738,8 +747,8 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc4_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt.1)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc4_16.1, runtime_param<invalid> [symbolic = %T.patt.loc4_16.2 (constants.%T.patt.1)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc4_16.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc4_16.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl [template] {
// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt.2)]
@@ -750,8 +759,8 @@ fn G(x: A) {
// CHECK:STDOUT: %HasF.ref: %HasF.type.1 = name_ref HasF, file.%HasF.decl [template = constants.%HasF]
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %HasF.type.loc8_34.1: type = interface_type @HasF, @HasF(constants.%T) [symbolic = %HasF.type.loc8_34.2 (constants.%HasF.type.2)]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
// CHECK:STDOUT: %x.patt: %.4 = binding_pattern x
@@ -759,8 +768,8 @@ fn G(x: A) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc12_10.1: %.4 = struct_literal ()
// CHECK:STDOUT: %.loc12_10.2: type = converted %.loc12_10.1, constants.%.4 [template = constants.%.4]
// CHECK:STDOUT: %param: %.4 = param runtime_param0
// CHECK:STDOUT: %x: %.4 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.4 = param runtime_param0
// CHECK:STDOUT: %x: %.4 = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -962,10 +971,10 @@ fn G(x: A) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc9_14.1 [symbolic = %T.loc9_14.2 (constants.%T)]
// CHECK:STDOUT: %HasF.ref: type = name_ref HasF, file.%HasF.decl [template = constants.%HasF.type]
// CHECK:STDOUT: %param.loc9_15: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc9_14.1: type = bind_symbolic_name T, 0, %param.loc9_15 [symbolic = %T.loc9_14.2 (constants.%T)]
// CHECK:STDOUT: %param.loc9_25: type = param runtime_param<invalid>
// CHECK:STDOUT: %U.loc9_24.1: type = bind_symbolic_name U, 1, %param.loc9_25 [symbolic = %U.loc9_24.2 (constants.%U)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc9_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc9_14.2 (constants.%T)]
// CHECK:STDOUT: %U.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %U.loc9_24.1: type = bind_symbolic_name U, 1, %U.param [symbolic = %U.loc9_24.2 (constants.%U)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
// CHECK:STDOUT: %x.patt: %.5 = binding_pattern x
@@ -973,8 +982,8 @@ fn G(x: A) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc13_10.1: %.5 = struct_literal ()
// CHECK:STDOUT: %.loc13_10.2: type = converted %.loc13_10.1, constants.%.5 [template = constants.%.5]
// CHECK:STDOUT: %param: %.5 = param runtime_param0
// CHECK:STDOUT: %x: %.5 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.5 = param runtime_param0
// CHECK:STDOUT: %x: %.5 = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1115,8 +1124,8 @@ fn G(x: A) {
// CHECK:STDOUT: %T.patt.loc4_16.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_16.2 (constants.%T.patt.1)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc4_16.1, runtime_param<invalid> [symbolic = %T.patt.loc4_16.2 (constants.%T.patt.1)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc4_16.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_16.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc4_16.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl [template] {
// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt.2)]
@@ -1126,8 +1135,8 @@ fn G(x: A) {
// CHECK:STDOUT: %HasF.ref: %HasF.type.1 = name_ref HasF, file.%HasF.decl [template = constants.%HasF]
// CHECK:STDOUT: %T.ref.loc8_34: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %HasF.type.loc8_33.1: type = interface_type @HasF, @HasF(constants.%T) [symbolic = %HasF.type.loc8_33.2 (constants.%HasF.type.2)]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.decl: type = class_decl @A [template = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: type = class_decl @B [template = constants.%B] {} {}
@@ -1136,8 +1145,8 @@ fn G(x: A) {
// CHECK:STDOUT: %x.param_patt: %A = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [template = constants.%A]
// CHECK:STDOUT: %param: %A = param runtime_param0
// CHECK:STDOUT: %x: %A = bind_name x, %param
// CHECK:STDOUT: %x.param: %A = param runtime_param0
// CHECK:STDOUT: %x: %A = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
+2 -2
View File
@@ -180,8 +180,8 @@ fn G(c: Impl.C) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Impl.ref.loc4: <namespace> = name_ref Impl, imports.%Impl [template = imports.%Impl]
// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%import_ref.8 [template = constants.%C]
// CHECK:STDOUT: %param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %param
// CHECK:STDOUT: %c.param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %c.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
+19 -10
View File
@@ -59,7 +59,7 @@ fn F(c: C) -> i32 {
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -76,14 +76,17 @@ fn F(c: C) -> i32 {
// CHECK:STDOUT: %F.decl: %F.type.3 = fn_decl @F.3 [template = constants.%F.3] {
// CHECK:STDOUT: %c.patt: %C = binding_pattern c
// CHECK:STDOUT: %c.param_patt: %C = param_pattern %c.patt, runtime_param0
// CHECK:STDOUT: %return.patt: i32 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: i32 = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl.loc11 [template = constants.%C]
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc23_15.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc23_15.2: type = converted %int.make_type_32, %.loc23_15.1 [template = i32]
// CHECK:STDOUT: %return: ref i32 = var <return slot>
// CHECK:STDOUT: %param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %param
// CHECK:STDOUT: %c.param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %c.param
// CHECK:STDOUT: %return.param: i32 = param runtime_param1
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -92,6 +95,8 @@ fn F(c: C) -> i32 {
// CHECK:STDOUT: %F.decl: %F.type.1 = fn_decl @F.1 [template = constants.%F.1] {
// CHECK:STDOUT: %self.patt: @F.1.%Self (%Self) = binding_pattern self
// CHECK:STDOUT: %self.param_patt: @F.1.%Self (%Self) = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %return.patt: i32 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: i32 = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc14_14.1: type = facet_type_access %Self.ref [symbolic = %Self (constants.%Self)]
@@ -99,9 +104,10 @@ fn F(c: C) -> i32 {
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc14_25.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc14_25.2: type = converted %int.make_type_32, %.loc14_25.1 [template = i32]
// CHECK:STDOUT: %return: ref i32 = var <return slot>
// CHECK:STDOUT: %param: @F.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self) = bind_name self, %param
// CHECK:STDOUT: %self.param: @F.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: i32 = param runtime_param1
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc14: %.2 = assoc_entity element0, %F.decl [template = constants.%.3]
// CHECK:STDOUT:
@@ -115,14 +121,17 @@ fn F(c: C) -> i32 {
// CHECK:STDOUT: %F.decl: %F.type.2 = fn_decl @F.2 [template = constants.%F.2] {
// CHECK:STDOUT: %self.patt: %C = binding_pattern self
// CHECK:STDOUT: %self.param_patt: %C = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %return.patt: i32 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: i32 = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [template = constants.%C]
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
// CHECK:STDOUT: %.loc19_27.1: type = value_of_initializer %int.make_type_32 [template = i32]
// CHECK:STDOUT: %.loc19_27.2: type = converted %int.make_type_32, %.loc19_27.1 [template = i32]
// CHECK:STDOUT: %return: ref i32 = var <return slot>
// CHECK:STDOUT: %param: %C = param runtime_param0
// CHECK:STDOUT: %self: %C = bind_name self, %param
// CHECK:STDOUT: %self.param: %C = param runtime_param0
// CHECK:STDOUT: %self: %C = bind_name self, %self.param
// CHECK:STDOUT: %return.param: i32 = param runtime_param1
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = interface_witness (%F.decl) [template = constants.%.4]
// CHECK:STDOUT:
@@ -117,15 +117,15 @@ fn TestSpecific(a: A({})) -> {} {
// CHECK:STDOUT: %T.patt.loc2_9.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc2_9.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc2_9.1, runtime_param<invalid> [symbolic = %T.patt.loc2_9.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc2_9.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc2_9.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc2_9.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc2_9.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %I.decl: %I.type.1 = interface_decl @I [template = constants.%I] {
// CHECK:STDOUT: %U.patt.loc6_13.1: type = symbolic_binding_pattern U, 0 [symbolic = %U.patt.loc6_13.2 (constants.%U.patt)]
// CHECK:STDOUT: %U.param_patt: type = param_pattern %U.patt.loc6_13.1, runtime_param<invalid> [symbolic = %U.patt.loc6_13.2 (constants.%U.patt)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %U.loc6_13.1: type = bind_symbolic_name U, 0, %param [symbolic = %U.loc6_13.2 (constants.%U)]
// CHECK:STDOUT: %U.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %U.loc6_13.1: type = bind_symbolic_name U, 0, %U.param [symbolic = %U.loc6_13.2 (constants.%U)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl [template] {
// CHECK:STDOUT: %V.patt.loc10_14.1: type = symbolic_binding_pattern V, 0 [symbolic = %V.patt.loc10_14.2 (constants.%V.patt)]
@@ -137,28 +137,33 @@ fn TestSpecific(a: A({})) -> {} {
// CHECK:STDOUT: %I.ref: %I.type.1 = name_ref I, file.%I.decl [template = constants.%I]
// CHECK:STDOUT: %V.ref.loc10_34: type = name_ref V, %V.loc10_14.1 [symbolic = %V.loc10_14.2 (constants.%V)]
// CHECK:STDOUT: %I.type.loc10_33.1: type = interface_type @I, @I(constants.%V) [symbolic = %I.type.loc10_33.2 (constants.%I.type.3)]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %V.loc10_14.1: type = bind_symbolic_name V, 0, %param [symbolic = %V.loc10_14.2 (constants.%V)]
// CHECK:STDOUT: %V.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %V.loc10_14.1: type = bind_symbolic_name V, 0, %V.param [symbolic = %V.loc10_14.2 (constants.%V)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %TestGeneric.decl: %TestGeneric.type = fn_decl @TestGeneric [template = constants.%TestGeneric] {
// CHECK:STDOUT: %W.patt.loc16_16.1: type = symbolic_binding_pattern W, 0 [symbolic = %W.patt.loc16_16.2 (constants.%W.patt)]
// CHECK:STDOUT: %W.param_patt: type = param_pattern %W.patt.loc16_16.1, runtime_param<invalid> [symbolic = %W.patt.loc16_16.2 (constants.%W.patt)]
// CHECK:STDOUT: %a.patt: @TestGeneric.%A.loc16_30.2 (%A.4) = binding_pattern a
// CHECK:STDOUT: %a.param_patt: @TestGeneric.%A.loc16_30.2 (%A.4) = param_pattern %a.patt, runtime_param0
// CHECK:STDOUT: %return.patt: @TestGeneric.%W.loc16_16.2 (%W) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @TestGeneric.%W.loc16_16.2 (%W) = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: %A.type = name_ref A, file.%A.decl [template = constants.%A.1]
// CHECK:STDOUT: %W.ref.loc16_31: type = name_ref W, %W.loc16_16.1 [symbolic = %W.loc16_16.2 (constants.%W)]
// CHECK:STDOUT: %A.loc16_30.1: type = class_type @A, @A(constants.%W) [symbolic = %A.loc16_30.2 (constants.%A.4)]
// CHECK:STDOUT: %W.ref.loc16_38: type = name_ref W, %W.loc16_16.1 [symbolic = %W.loc16_16.2 (constants.%W)]
// CHECK:STDOUT: %return: ref @TestGeneric.%W.loc16_16.2 (%W) = var <return slot>
// CHECK:STDOUT: %param.loc16_17: type = param runtime_param<invalid>
// CHECK:STDOUT: %W.loc16_16.1: type = bind_symbolic_name W, 0, %param.loc16_17 [symbolic = %W.loc16_16.2 (constants.%W)]
// CHECK:STDOUT: %param.loc16_27: @TestGeneric.%A.loc16_30.2 (%A.4) = param runtime_param0
// CHECK:STDOUT: %a: @TestGeneric.%A.loc16_30.2 (%A.4) = bind_name a, %param.loc16_27
// CHECK:STDOUT: %W.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %W.loc16_16.1: type = bind_symbolic_name W, 0, %W.param [symbolic = %W.loc16_16.2 (constants.%W)]
// CHECK:STDOUT: %a.param: @TestGeneric.%A.loc16_30.2 (%A.4) = param runtime_param0
// CHECK:STDOUT: %a: @TestGeneric.%A.loc16_30.2 (%A.4) = bind_name a, %a.param
// CHECK:STDOUT: %return.param: @TestGeneric.%W.loc16_16.2 (%W) = param runtime_param1
// CHECK:STDOUT: %return: ref @TestGeneric.%W.loc16_16.2 (%W) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %TestSpecific.decl: %TestSpecific.type = fn_decl @TestSpecific [template = constants.%TestSpecific] {
// CHECK:STDOUT: %a.patt: %A.5 = binding_pattern a
// CHECK:STDOUT: %a.param_patt: %A.5 = param_pattern %a.patt, runtime_param0
// CHECK:STDOUT: %return.patt: %.21 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %.21 = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: %A.type = name_ref A, file.%A.decl [template = constants.%A.1]
// CHECK:STDOUT: %.loc20_23: %.21 = struct_literal ()
@@ -166,9 +171,10 @@ fn TestSpecific(a: A({})) -> {} {
// CHECK:STDOUT: %A: type = class_type @A, @A(constants.%.21) [template = constants.%A.5]
// CHECK:STDOUT: %.loc20_31.1: %.21 = struct_literal ()
// CHECK:STDOUT: %.loc20_31.2: type = converted %.loc20_31.1, constants.%.21 [template = constants.%.21]
// CHECK:STDOUT: %return: ref %.21 = var <return slot>
// CHECK:STDOUT: %param: %A.5 = param runtime_param0
// CHECK:STDOUT: %a: %A.5 = bind_name a, %param
// CHECK:STDOUT: %a.param: %A.5 = param runtime_param0
// CHECK:STDOUT: %a: %A.5 = bind_name a, %a.param
// CHECK:STDOUT: %return.param: %.21 = param runtime_param1
// CHECK:STDOUT: %return: ref %.21 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -189,15 +195,18 @@ fn TestSpecific(a: A({})) -> {} {
// CHECK:STDOUT: %F.decl: @I.%F.type (%F.type.1) = fn_decl @F.1 [symbolic = @I.%F (constants.%F.1)] {
// CHECK:STDOUT: %self.patt: @F.1.%Self (%Self) = binding_pattern self
// CHECK:STDOUT: %self.param_patt: @F.1.%Self (%Self) = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %return.patt: @F.1.%U (%U) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @F.1.%U (%U) = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc7_14.1: @F.1.%I.type (%I.type.2) = specific_constant @I.%Self.1, @I(constants.%U) [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.ref: @F.1.%I.type (%I.type.2) = name_ref Self, %.loc7_14.1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc7_14.2: type = facet_type_access %Self.ref [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc7_14.3: type = converted %Self.ref, %.loc7_14.2 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %U.ref: type = name_ref U, @I.%U.loc6_13.1 [symbolic = %U (constants.%U)]
// CHECK:STDOUT: %return: ref @F.1.%U (%U) = var <return slot>
// CHECK:STDOUT: %param: @F.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self) = bind_name self, %param
// CHECK:STDOUT: %self.param: @F.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: @F.1.%U (%U) = param runtime_param1
// CHECK:STDOUT: %return: ref @F.1.%U (%U) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc7_26.1: @I.%.loc7_26.2 (%.5) = assoc_entity element0, %F.decl [symbolic = %.loc7_26.3 (constants.%.6)]
// CHECK:STDOUT:
@@ -223,12 +232,15 @@ fn TestSpecific(a: A({})) -> {} {
// CHECK:STDOUT: %F.decl: @impl.%F.type (%F.type.2) = fn_decl @F.2 [symbolic = @impl.%F (constants.%F.2)] {
// CHECK:STDOUT: %self.patt: @F.2.%A (%A.3) = binding_pattern self
// CHECK:STDOUT: %self.param_patt: @F.2.%A (%A.3) = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %return.patt: @F.2.%V (%V) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @F.2.%V (%V) = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%A.loc10_25.1 [symbolic = %A (constants.%A.3)]
// CHECK:STDOUT: %V.ref: type = name_ref V, @impl.%V.loc10_14.1 [symbolic = %V (constants.%V)]
// CHECK:STDOUT: %return: ref @F.2.%V (%V) = var <return slot>
// CHECK:STDOUT: %param: @F.2.%A (%A.3) = param runtime_param0
// CHECK:STDOUT: %self: @F.2.%A (%A.3) = bind_name self, %param
// CHECK:STDOUT: %self.param: @F.2.%A (%A.3) = param runtime_param0
// CHECK:STDOUT: %self: @F.2.%A (%A.3) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: @F.2.%V (%V) = param runtime_param1
// CHECK:STDOUT: %return: ref @F.2.%V (%V) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc10_37.1: <witness> = interface_witness (%F.decl) [symbolic = %.loc10_37.2 (constants.%.9)]
// CHECK:STDOUT:
@@ -153,8 +153,8 @@ fn G(c: Impl.C) {
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Impl.ref.loc4: <namespace> = name_ref Impl, imports.%Impl [template = imports.%Impl]
// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%import_ref.8 [template = constants.%C]
// CHECK:STDOUT: %param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %param
// CHECK:STDOUT: %c.param: %C = param runtime_param0
// CHECK:STDOUT: %c: %C = bind_name c, %c.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -114,8 +114,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc11_21.1: type = facet_type_access %T.ref [symbolic = %T.loc11_14.2 (constants.%T.1)]
// CHECK:STDOUT: %.loc11_21.2: type = converted %T.ref, %.loc11_21.1 [symbolic = %T.loc11_14.2 (constants.%T.1)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc11_14.1: %I.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc11_14.2 (constants.%T.1)]
// CHECK:STDOUT: %T.param: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc11_14.1: %I.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc11_14.2 (constants.%T.1)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.2 [template] {
// CHECK:STDOUT: %T.patt.loc12_14.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc12_14.2 (constants.%T.patt.2)]
@@ -126,8 +126,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc12_21.1: type = facet_type_access %T.ref [symbolic = %T.loc12_14.2 (constants.%T.2)]
// CHECK:STDOUT: %.loc12_21.2: type = converted %T.ref, %.loc12_21.1 [symbolic = %T.loc12_14.2 (constants.%T.2)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %J.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc12_14.1: %J.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc12_14.2 (constants.%T.2)]
// CHECK:STDOUT: %T.param: %J.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc12_14.1: %J.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc12_14.2 (constants.%T.2)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.3 [template] {
// CHECK:STDOUT: %T.patt.loc13_14.1: %K.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc13_14.2 (constants.%T.patt.3)]
@@ -138,8 +138,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc13_21.1: type = facet_type_access %T.ref [symbolic = %T.loc13_14.2 (constants.%T.3)]
// CHECK:STDOUT: %.loc13_21.2: type = converted %T.ref, %.loc13_21.1 [symbolic = %T.loc13_14.2 (constants.%T.3)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %K.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc13_14.1: %K.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc13_14.2 (constants.%T.3)]
// CHECK:STDOUT: %T.param: %K.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc13_14.1: %K.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc13_14.2 (constants.%T.3)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.4 [template] {
// CHECK:STDOUT: %T.patt.loc14_14.1: %L.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc14_14.2 (constants.%T.patt.4)]
@@ -150,8 +150,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc14_21.1: type = facet_type_access %T.ref [symbolic = %T.loc14_14.2 (constants.%T.4)]
// CHECK:STDOUT: %.loc14_21.2: type = converted %T.ref, %.loc14_21.1 [symbolic = %T.loc14_14.2 (constants.%T.4)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %L.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc14_14.1: %L.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc14_14.2 (constants.%T.4)]
// CHECK:STDOUT: %T.param: %L.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc14_14.1: %L.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc14_14.2 (constants.%T.4)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.5 [template] {
// CHECK:STDOUT: %T.patt.loc18_14.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc18_14.2 (constants.%T.patt.5)]
@@ -162,8 +162,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc18_21.1: type = facet_type_access %T.ref [symbolic = %T.loc18_14.2 (constants.%T.1)]
// CHECK:STDOUT: %.loc18_21.2: type = converted %T.ref, %.loc18_21.1 [symbolic = %T.loc18_14.2 (constants.%T.1)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc18_14.1: %I.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc18_14.2 (constants.%T.1)]
// CHECK:STDOUT: %T.param: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc18_14.1: %I.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc18_14.2 (constants.%T.1)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.6 [template] {
// CHECK:STDOUT: %T.patt.loc19_14.1: %J.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc19_14.2 (constants.%T.patt.6)]
@@ -174,8 +174,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc19_21.1: type = facet_type_access %T.ref [symbolic = %T.loc19_14.2 (constants.%T.2)]
// CHECK:STDOUT: %.loc19_21.2: type = converted %T.ref, %.loc19_21.1 [symbolic = %T.loc19_14.2 (constants.%T.2)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %J.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc19_14.1: %J.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc19_14.2 (constants.%T.2)]
// CHECK:STDOUT: %T.param: %J.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc19_14.1: %J.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc19_14.2 (constants.%T.2)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.7 [template] {
// CHECK:STDOUT: %T.patt.loc20_14.1: %K.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc20_14.2 (constants.%T.patt.7)]
@@ -186,8 +186,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc20_21.1: type = facet_type_access %T.ref [symbolic = %T.loc20_14.2 (constants.%T.3)]
// CHECK:STDOUT: %.loc20_21.2: type = converted %T.ref, %.loc20_21.1 [symbolic = %T.loc20_14.2 (constants.%T.3)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %K.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc20_14.1: %K.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc20_14.2 (constants.%T.3)]
// CHECK:STDOUT: %T.param: %K.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc20_14.1: %K.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc20_14.2 (constants.%T.3)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.8 [template] {
// CHECK:STDOUT: %T.patt.loc21_14.1: %L.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc21_14.2 (constants.%T.patt.8)]
@@ -198,8 +198,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc21_21.1: type = facet_type_access %T.ref [symbolic = %T.loc21_14.2 (constants.%T.4)]
// CHECK:STDOUT: %.loc21_21.2: type = converted %T.ref, %.loc21_21.1 [symbolic = %T.loc21_14.2 (constants.%T.4)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [template = constants.%Interface.type]
// CHECK:STDOUT: %param: %L.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc21_14.1: %L.type = bind_symbolic_name T, 0, %param [symbolic = %T.loc21_14.2 (constants.%T.4)]
// CHECK:STDOUT: %T.param: %L.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc21_14.1: %L.type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc21_14.2 (constants.%T.4)]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -397,8 +397,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc7_21.1: type = facet_type_access %T.ref.loc7 [symbolic = %T.loc7_14.2 (constants.%T)]
// CHECK:STDOUT: %.loc7_21.2: type = converted %T.ref.loc7, %.loc7_21.1 [symbolic = %T.loc7_14.2 (constants.%T)]
// CHECK:STDOUT: %J.ref.loc7: type = name_ref J, file.%J.decl [template = constants.%J.type]
// CHECK:STDOUT: %param.loc7: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc7_14.1: %I.type = bind_symbolic_name T, 0, %param.loc7 [symbolic = %T.loc7_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param.loc7: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc7_14.1: %I.type = bind_symbolic_name T, 0, %T.param.loc7 [symbolic = %T.loc7_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl [template] {
// CHECK:STDOUT: %T.patt.loc7_14.1: %I.type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.1)]
@@ -409,8 +409,8 @@ impl (C, C).0 as I {}
// CHECK:STDOUT: %.loc14_21.1: type = facet_type_access %T.ref.loc14 [symbolic = constants.%T]
// CHECK:STDOUT: %.loc14_21.2: type = converted %T.ref.loc14, %.loc14_21.1 [symbolic = constants.%T]
// CHECK:STDOUT: %J.ref.loc14: type = name_ref J, file.%J.decl [template = constants.%J.type]
// CHECK:STDOUT: %param.loc14: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc14: %I.type = bind_symbolic_name T, 0, %param.loc14 [symbolic = constants.%T]
// CHECK:STDOUT: %T.param.loc14: %I.type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc14: %I.type = bind_symbolic_name T, 0, %T.param.loc14 [symbolic = constants.%T]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -67,8 +67,8 @@ impl forall [T:! type] C as I(T*) {}
// CHECK:STDOUT: %T.patt.loc5_13.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.1)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc5_13.1, runtime_param<invalid> [symbolic = %T.patt.loc5_13.2 (constants.%T.patt.1)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc5_13.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc5_13.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc5_13.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc5_13.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.1 [template] {
// CHECK:STDOUT: %T.patt.loc7_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc7_14.2 (constants.%T.patt.2)]
@@ -78,8 +78,8 @@ impl forall [T:! type] C as I(T*) {}
// CHECK:STDOUT: %I.ref: %I.type.1 = name_ref I, file.%I.decl [template = constants.%I]
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc7_14.1 [symbolic = %T.loc7_14.2 (constants.%T)]
// CHECK:STDOUT: %I.type.loc7_30.1: type = interface_type @I, @I(constants.%T) [symbolic = %I.type.loc7_30.2 (constants.%I.type.2)]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc7_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc7_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc7_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc7_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @impl.2 [template] {
// CHECK:STDOUT: %T.patt.loc8_14.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc8_14.2 (constants.%T.patt.3)]
@@ -90,8 +90,8 @@ impl forall [T:! type] C as I(T*) {}
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_14.1 [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %.loc8_32.1: type = ptr_type %T [symbolic = %.loc8_32.2 (constants.%.4)]
// CHECK:STDOUT: %I.type.loc8_30.1: type = interface_type @I, @I(constants.%.4) [symbolic = %I.type.loc8_30.2 (constants.%I.type.3)]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc8_14.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc8_14.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -229,8 +229,8 @@ impl forall [T:! type] C as I(T*) {}
// CHECK:STDOUT: %I.ref: %I.type.1 = name_ref I, imports.%import_ref.2 [template = constants.%I]
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = constants.%T]
// CHECK:STDOUT: %I.type.loc4: type = interface_type @I, @I(constants.%T) [symbolic = constants.%I.type.2]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T, 0, %param [symbolic = constants.%T]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4: type = bind_symbolic_name T, 0, %T.param [symbolic = constants.%T]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -369,8 +369,8 @@ impl forall [T:! type] C as I(T*) {}
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11 [symbolic = constants.%T]
// CHECK:STDOUT: %.loc11: type = ptr_type %T [symbolic = constants.%.4]
// CHECK:STDOUT: %I.type.loc11: type = interface_type @I, @I(constants.%.4) [symbolic = constants.%I.type.3]
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T, 0, %param [symbolic = constants.%T]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc11: type = bind_symbolic_name T, 0, %T.param [symbolic = constants.%T]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
+27 -18
View File
@@ -56,6 +56,8 @@ fn F(x: (), y: ()) -> () {
// CHECK:STDOUT: %self.param_patt: @Op.%Self (%Self) = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %other.patt: @Op.%Self (%Self) = binding_pattern other
// CHECK:STDOUT: %other.param_patt: @Op.%Self (%Self) = param_pattern %other.patt, runtime_param1
// CHECK:STDOUT: %return.patt: @Op.%Self (%Self) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @Op.%Self (%Self) = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref.loc5_15: %Add.type = name_ref Self, @Add.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc5_15.1: type = facet_type_access %Self.ref.loc5_15 [symbolic = %Self (constants.%Self)]
@@ -66,11 +68,12 @@ fn F(x: (), y: ()) -> () {
// CHECK:STDOUT: %Self.ref.loc5_37: %Add.type = name_ref Self, @Add.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc5_37.1: type = facet_type_access %Self.ref.loc5_37 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc5_37.2: type = converted %Self.ref.loc5_37, %.loc5_37.1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %return: ref @Op.%Self (%Self) = var <return slot>
// CHECK:STDOUT: %param.loc5_13: @Op.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @Op.%Self (%Self) = bind_name self, %param.loc5_13
// CHECK:STDOUT: %param.loc5_26: @Op.%Self (%Self) = param runtime_param1
// CHECK:STDOUT: %other: @Op.%Self (%Self) = bind_name other, %param.loc5_26
// CHECK:STDOUT: %self.param: @Op.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %self: @Op.%Self (%Self) = bind_name self, %self.param
// CHECK:STDOUT: %other.param: @Op.%Self (%Self) = param runtime_param1
// CHECK:STDOUT: %other: @Op.%Self (%Self) = bind_name other, %other.param
// CHECK:STDOUT: %return.param: @Op.%Self (%Self) = param runtime_param2
// CHECK:STDOUT: %return: ref @Op.%Self (%Self) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5: %.2 = assoc_entity element0, %Op.decl [template = constants.%.3]
// CHECK:STDOUT:
@@ -111,9 +114,9 @@ fn F(x: (), y: ()) -> () {
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %import_ref.1: type = import_ref Main//a, inst+1, loaded [template = constants.%Add.type]
// CHECK:STDOUT: %import_ref.2 = import_ref Main//a, inst+3, unloaded
// CHECK:STDOUT: %import_ref.3: %.3 = import_ref Main//a, inst+29, loaded [template = constants.%.4]
// CHECK:STDOUT: %import_ref.4: %Op.type.2 = import_ref Main//a, inst+23, loaded [template = constants.%Op.2]
// CHECK:STDOUT: %import_ref.5 = import_ref Main//a, inst+23, unloaded
// CHECK:STDOUT: %import_ref.3: %.3 = import_ref Main//a, inst+32, loaded [template = constants.%.4]
// CHECK:STDOUT: %import_ref.4: %Op.type.2 = import_ref Main//a, inst+26, loaded [template = constants.%Op.2]
// CHECK:STDOUT: %import_ref.5 = import_ref Main//a, inst+26, unloaded
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -132,6 +135,8 @@ fn F(x: (), y: ()) -> () {
// CHECK:STDOUT: %x.param_patt: %.1 = param_pattern %x.patt, runtime_param0
// CHECK:STDOUT: %y.patt: %.1 = binding_pattern y
// CHECK:STDOUT: %y.param_patt: %.1 = param_pattern %y.patt, runtime_param1
// CHECK:STDOUT: %return.patt: %.1 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %.1 = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc10_10.1: %.1 = tuple_literal ()
// CHECK:STDOUT: %.loc10_10.2: type = converted %.loc10_10.1, constants.%.1 [template = constants.%.1]
@@ -139,11 +144,12 @@ fn F(x: (), y: ()) -> () {
// CHECK:STDOUT: %.loc10_17.2: type = converted %.loc10_17.1, constants.%.1 [template = constants.%.1]
// CHECK:STDOUT: %.loc10_24.1: %.1 = tuple_literal ()
// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, constants.%.1 [template = constants.%.1]
// CHECK:STDOUT: %return: ref %.1 = var <return slot>
// CHECK:STDOUT: %param.loc10_7: %.1 = param runtime_param0
// CHECK:STDOUT: %x: %.1 = bind_name x, %param.loc10_7
// CHECK:STDOUT: %param.loc10_14: %.1 = param runtime_param1
// CHECK:STDOUT: %y: %.1 = bind_name y, %param.loc10_14
// CHECK:STDOUT: %x.param: %.1 = param runtime_param0
// CHECK:STDOUT: %x: %.1 = bind_name x, %x.param
// CHECK:STDOUT: %y.param: %.1 = param runtime_param1
// CHECK:STDOUT: %y: %.1 = bind_name y, %y.param
// CHECK:STDOUT: %return.param: %.1 = param runtime_param2
// CHECK:STDOUT: %return: ref %.1 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -160,15 +166,18 @@ fn F(x: (), y: ()) -> () {
// CHECK:STDOUT: %self.param_patt: %.1 = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %other.patt: %.1 = binding_pattern other
// CHECK:STDOUT: %other.param_patt: %.1 = param_pattern %other.patt, runtime_param1
// CHECK:STDOUT: %return.patt: %.1 = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %.1 = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref.loc7_15: type = name_ref Self, @impl.%.loc6_7.2 [template = constants.%.1]
// CHECK:STDOUT: %Self.ref.loc7_28: type = name_ref Self, @impl.%.loc6_7.2 [template = constants.%.1]
// CHECK:STDOUT: %Self.ref.loc7_37: type = name_ref Self, @impl.%.loc6_7.2 [template = constants.%.1]
// CHECK:STDOUT: %return: ref %.1 = var <return slot>
// CHECK:STDOUT: %param.loc7_13: %.1 = param runtime_param0
// CHECK:STDOUT: %self: %.1 = bind_name self, %param.loc7_13
// CHECK:STDOUT: %param.loc7_26: %.1 = param runtime_param1
// CHECK:STDOUT: %other: %.1 = bind_name other, %param.loc7_26
// CHECK:STDOUT: %self.param: %.1 = param runtime_param0
// CHECK:STDOUT: %self: %.1 = bind_name self, %self.param
// CHECK:STDOUT: %other.param: %.1 = param runtime_param1
// CHECK:STDOUT: %other: %.1 = bind_name other, %other.param
// CHECK:STDOUT: %return.param: %.1 = param runtime_param2
// CHECK:STDOUT: %return: ref %.1 = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc6_16: <witness> = interface_witness (%Op.decl) [template = constants.%.2]
// CHECK:STDOUT:
@@ -122,8 +122,8 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %T.patt.loc4_18.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc4_18.1, runtime_param<invalid> [symbolic = %T.patt.loc4_18.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_18.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc4_18.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_18.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc4_18.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.decl: type = class_decl @A [template = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: type = class_decl @B [template = constants.%B] {} {}
@@ -139,8 +139,8 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %a.param_patt: %A = param_pattern %a.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [template = constants.%A]
// CHECK:STDOUT: %param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %param
// CHECK:STDOUT: %a.param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %a.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -317,8 +317,8 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %a.param_patt: %A = param_pattern %a.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: type = name_ref A, imports.%import_ref.2 [template = constants.%A]
// CHECK:STDOUT: %param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %param
// CHECK:STDOUT: %a.param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %a.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -476,8 +476,8 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %a.param_patt: %A = param_pattern %a.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: type = name_ref A, imports.%import_ref.2 [template = constants.%A]
// CHECK:STDOUT: %param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %param
// CHECK:STDOUT: %a.param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %a.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -614,8 +614,8 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %T.patt.loc4_19.1: type = symbolic_binding_pattern T, 0 [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)]
// CHECK:STDOUT: %T.param_patt: type = param_pattern %T.patt.loc4_19.1, runtime_param<invalid> [symbolic = %T.patt.loc4_19.2 (constants.%T.patt)]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_19.1: type = bind_symbolic_name T, 0, %param [symbolic = %T.loc4_19.2 (constants.%T)]
// CHECK:STDOUT: %T.param: type = param runtime_param<invalid>
// CHECK:STDOUT: %T.loc4_19.1: type = bind_symbolic_name T, 0, %T.param [symbolic = %T.loc4_19.2 (constants.%T)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %A.decl: type = class_decl @A [template = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: type = class_decl @B [template = constants.%B] {} {}
@@ -641,9 +641,13 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.1: @Factory.%Factory.type (%Factory.type.2) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)]
// CHECK:STDOUT: %Make.decl: @Factory.%Make.type (%Make.type.1) = fn_decl @Make.1 [symbolic = @Factory.%Make (constants.%Make.1)] {} {
// CHECK:STDOUT: %Make.decl: @Factory.%Make.type (%Make.type.1) = fn_decl @Make.1 [symbolic = @Factory.%Make (constants.%Make.1)] {
// CHECK:STDOUT: %return.patt: @Make.1.%T (%T) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @Make.1.%T (%T) = param_pattern %return.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, @Factory.%T.loc4_19.1 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %return: ref @Make.1.%T (%T) = var <return slot>
// CHECK:STDOUT: %return.param: @Make.1.%T (%T) = param runtime_param0
// CHECK:STDOUT: %return: ref @Make.1.%T (%T) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc5_17.1: @Factory.%.loc5_17.2 (%.2) = assoc_entity element0, %Make.decl [symbolic = %.loc5_17.3 (constants.%.3)]
// CHECK:STDOUT:
@@ -655,9 +659,13 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: impl @impl: %A.ref as %Factory.type {
// CHECK:STDOUT: %Make.decl: %Make.type.2 = fn_decl @Make.2 [template = constants.%Make.2] {} {
// CHECK:STDOUT: %Make.decl: %Make.type.2 = fn_decl @Make.2 [template = constants.%Make.2] {
// CHECK:STDOUT: %return.patt: %B = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %B = param_pattern %return.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [template = constants.%B]
// CHECK:STDOUT: %return: ref %B = var <return slot>
// CHECK:STDOUT: %return.param: %B = param runtime_param0
// CHECK:STDOUT: %return: ref %B = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11: <witness> = interface_witness (%Make.decl) [template = constants.%.8]
// CHECK:STDOUT:
@@ -754,20 +762,20 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %import_ref.1: %Factory.type.1 = import_ref Main//factory, inst+7, loaded [template = constants.%Factory]
// CHECK:STDOUT: %import_ref.2: type = import_ref Main//factory, inst+31, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.3: type = import_ref Main//factory, inst+36, loaded [template = constants.%B]
// CHECK:STDOUT: %import_ref.4 = import_ref Main//factory, inst+37, unloaded
// CHECK:STDOUT: %import_ref.2: type = import_ref Main//factory, inst+34, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.3: type = import_ref Main//factory, inst+39, loaded [template = constants.%B]
// CHECK:STDOUT: %import_ref.4 = import_ref Main//factory, inst+40, unloaded
// CHECK:STDOUT: %import_ref.5 = import_ref Main//factory, inst+14, unloaded
// CHECK:STDOUT: %import_ref.6: @Factory.%.1 (%.4) = import_ref Main//factory, inst+23, loaded [symbolic = @Factory.%.2 (constants.%.9)]
// CHECK:STDOUT: %import_ref.7 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.8 = import_ref Main//factory, inst+32, unloaded
// CHECK:STDOUT: %import_ref.9: type = import_ref Main//factory, inst+39, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.10: type = import_ref Main//factory, inst+42, loaded [template = constants.%Factory.type.3]
// CHECK:STDOUT: %import_ref.11: <witness> = import_ref Main//factory, inst+54, loaded [template = constants.%.10]
// CHECK:STDOUT: %import_ref.12 = import_ref Main//factory, inst+47, unloaded
// CHECK:STDOUT: %import_ref.13 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.14 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.15 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.6: @Factory.%.1 (%.4) = import_ref Main//factory, inst+26, loaded [symbolic = @Factory.%.2 (constants.%.9)]
// CHECK:STDOUT: %import_ref.7 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: %import_ref.8 = import_ref Main//factory, inst+35, unloaded
// CHECK:STDOUT: %import_ref.9: type = import_ref Main//factory, inst+42, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.10: type = import_ref Main//factory, inst+45, loaded [template = constants.%Factory.type.3]
// CHECK:STDOUT: %import_ref.11: <witness> = import_ref Main//factory, inst+60, loaded [template = constants.%.10]
// CHECK:STDOUT: %import_ref.12 = import_ref Main//factory, inst+53, unloaded
// CHECK:STDOUT: %import_ref.13 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: %import_ref.14 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: %import_ref.15 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -782,12 +790,15 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %MakeB.decl: %MakeB.type = fn_decl @MakeB [template = constants.%MakeB] {
// CHECK:STDOUT: %a.patt: %A = binding_pattern a
// CHECK:STDOUT: %a.param_patt: %A = param_pattern %a.patt, runtime_param0
// CHECK:STDOUT: %return.patt: %B = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %B = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: type = name_ref A, imports.%import_ref.2 [template = constants.%A]
// CHECK:STDOUT: %B.ref.loc4: type = name_ref B, imports.%import_ref.3 [template = constants.%B]
// CHECK:STDOUT: %return: ref %B = var <return slot>
// CHECK:STDOUT: %param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %param
// CHECK:STDOUT: %a.param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %a.param
// CHECK:STDOUT: %return.param: %B = param runtime_param1
// CHECK:STDOUT: %return: ref %B = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -842,8 +853,8 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %.loc5_23: %.6 = specific_constant imports.%import_ref.6, @Factory(constants.%B) [template = constants.%.7]
// CHECK:STDOUT: %Make.ref: %.6 = name_ref Make, %.loc5_23 [template = constants.%.7]
// CHECK:STDOUT: %.loc5_11: %Make.type.2 = interface_witness_access constants.%.10, element0 [template = constants.%Make.3]
// CHECK:STDOUT: %.loc4: ref %B = splice_block %return {}
// CHECK:STDOUT: %Make.call: init %B = call %.loc5_11() to %.loc4
// CHECK:STDOUT: %.loc4_16.2: ref %B = splice_block %return {}
// CHECK:STDOUT: %Make.call: init %B = call %.loc5_11() to %.loc4_16.2
// CHECK:STDOUT: return %Make.call to %return
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -914,20 +925,20 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %import_ref.1: %Factory.type.1 = import_ref Main//factory, inst+7, loaded [template = constants.%Factory]
// CHECK:STDOUT: %import_ref.2: type = import_ref Main//factory, inst+31, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.3 = import_ref Main//factory, inst+36, unloaded
// CHECK:STDOUT: %import_ref.4 = import_ref Main//factory, inst+37, unloaded
// CHECK:STDOUT: %import_ref.2: type = import_ref Main//factory, inst+34, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.3 = import_ref Main//factory, inst+39, unloaded
// CHECK:STDOUT: %import_ref.4 = import_ref Main//factory, inst+40, unloaded
// CHECK:STDOUT: %import_ref.5 = import_ref Main//factory, inst+14, unloaded
// CHECK:STDOUT: %import_ref.6: @Factory.%.1 (%.4) = import_ref Main//factory, inst+23, loaded [symbolic = @Factory.%.2 (constants.%.11)]
// CHECK:STDOUT: %import_ref.7 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.8 = import_ref Main//factory, inst+32, unloaded
// CHECK:STDOUT: %import_ref.9: type = import_ref Main//factory, inst+39, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.10: type = import_ref Main//factory, inst+42, loaded [template = constants.%Factory.type.3]
// CHECK:STDOUT: %import_ref.11 = import_ref Main//factory, inst+54, unloaded
// CHECK:STDOUT: %import_ref.12 = import_ref Main//factory, inst+47, unloaded
// CHECK:STDOUT: %import_ref.13 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.14 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.15 = import_ref Main//factory, inst+18, unloaded
// CHECK:STDOUT: %import_ref.6: @Factory.%.1 (%.4) = import_ref Main//factory, inst+26, loaded [symbolic = @Factory.%.2 (constants.%.11)]
// CHECK:STDOUT: %import_ref.7 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: %import_ref.8 = import_ref Main//factory, inst+35, unloaded
// CHECK:STDOUT: %import_ref.9: type = import_ref Main//factory, inst+42, loaded [template = constants.%A]
// CHECK:STDOUT: %import_ref.10: type = import_ref Main//factory, inst+45, loaded [template = constants.%Factory.type.3]
// CHECK:STDOUT: %import_ref.11 = import_ref Main//factory, inst+60, unloaded
// CHECK:STDOUT: %import_ref.12 = import_ref Main//factory, inst+53, unloaded
// CHECK:STDOUT: %import_ref.13 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: %import_ref.14 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: %import_ref.15 = import_ref Main//factory, inst+21, unloaded
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -944,12 +955,15 @@ fn MakeC(a: A) -> C {
// CHECK:STDOUT: %MakeC.decl: %MakeC.type = fn_decl @MakeC [template = constants.%MakeC] {
// CHECK:STDOUT: %a.patt: %A = binding_pattern a
// CHECK:STDOUT: %a.param_patt: %A = param_pattern %a.patt, runtime_param0
// CHECK:STDOUT: %return.patt: %C = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %C = param_pattern %return.patt, runtime_param1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %A.ref: type = name_ref A, imports.%import_ref.2 [template = constants.%A]
// CHECK:STDOUT: %C.ref.loc6: type = name_ref C, file.%C.decl [template = constants.%C]
// CHECK:STDOUT: %return: ref %C = var <return slot>
// CHECK:STDOUT: %param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %param
// CHECK:STDOUT: %a.param: %A = param runtime_param0
// CHECK:STDOUT: %a: %A = bind_name a, %a.param
// CHECK:STDOUT: %return.param: %C = param runtime_param1
// CHECK:STDOUT: %return: ref %C = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -56,11 +56,15 @@ class A {
// CHECK:STDOUT:
// CHECK:STDOUT: interface @DefaultConstructible {
// CHECK:STDOUT: %Self: %DefaultConstructible.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %Make.decl: %Make.type.1 = fn_decl @Make.1 [template = constants.%Make.1] {} {
// CHECK:STDOUT: %Make.decl: %Make.type.1 = fn_decl @Make.1 [template = constants.%Make.1] {
// CHECK:STDOUT: %return.patt: @Make.1.%Self (%Self) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @Make.1.%Self (%Self) = param_pattern %return.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: %DefaultConstructible.type = name_ref Self, @DefaultConstructible.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc12_16.1: type = facet_type_access %Self.ref [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc12_16.2: type = converted %Self.ref, %.loc12_16.1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %return: ref @Make.1.%Self (%Self) = var <return slot>
// CHECK:STDOUT: %return.param: @Make.1.%Self (%Self) = param runtime_param0
// CHECK:STDOUT: %return: ref @Make.1.%Self (%Self) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: %.2 = assoc_entity element0, %Make.decl [template = constants.%.3]
// CHECK:STDOUT:
@@ -71,9 +75,13 @@ class A {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: impl @impl: %C.ref as %DefaultConstructible.ref {
// CHECK:STDOUT: %Make.decl: %Make.type.2 = fn_decl @Make.2 [template = constants.%Make.2] {} {
// CHECK:STDOUT: %Make.decl: %Make.type.2 = fn_decl @Make.2 [template = constants.%Make.2] {
// CHECK:STDOUT: %return.patt: %C = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %C = param_pattern %return.patt, runtime_param0
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, @impl.%C.ref [template = constants.%C]
// CHECK:STDOUT: %return: ref %C = var <return slot>
// CHECK:STDOUT: %return.param: %C = param runtime_param0
// CHECK:STDOUT: %return: ref %C = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc18: <witness> = interface_witness (%Make.decl) [template = constants.%.6]
// CHECK:STDOUT:
@@ -119,6 +119,8 @@ impl D as SelfNested {
// CHECK:STDOUT: %self.param_patt: @F.1.%Self (%Self.1) = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %x.patt: @F.1.%Self (%Self.1) = binding_pattern x
// CHECK:STDOUT: %x.param_patt: @F.1.%Self (%Self.1) = param_pattern %x.patt, runtime_param1
// CHECK:STDOUT: %return.patt: @F.1.%Self (%Self.1) = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: @F.1.%Self (%Self.1) = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref.loc12_14: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self.1)]
// CHECK:STDOUT: %.loc12_14.1: type = facet_type_access %Self.ref.loc12_14 [symbolic = %Self (constants.%Self.1)]
@@ -129,11 +131,12 @@ impl D as SelfNested {
// CHECK:STDOUT: %Self.ref.loc12_32: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self.1)]
// CHECK:STDOUT: %.loc12_32.1: type = facet_type_access %Self.ref.loc12_32 [symbolic = %Self (constants.%Self.1)]
// CHECK:STDOUT: %.loc12_32.2: type = converted %Self.ref.loc12_32, %.loc12_32.1 [symbolic = %Self (constants.%Self.1)]
// CHECK:STDOUT: %return: ref @F.1.%Self (%Self.1) = var <return slot>
// CHECK:STDOUT: %param.loc12_12: @F.1.%Self (%Self.1) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self.1) = bind_name self, %param.loc12_12
// CHECK:STDOUT: %param.loc12_21: @F.1.%Self (%Self.1) = param runtime_param1
// CHECK:STDOUT: %x: @F.1.%Self (%Self.1) = bind_name x, %param.loc12_21
// CHECK:STDOUT: %self.param: @F.1.%Self (%Self.1) = param runtime_param0
// CHECK:STDOUT: %self: @F.1.%Self (%Self.1) = bind_name self, %self.param
// CHECK:STDOUT: %x.param: @F.1.%Self (%Self.1) = param runtime_param1
// CHECK:STDOUT: %x: @F.1.%Self (%Self.1) = bind_name x, %x.param
// CHECK:STDOUT: %return.param: @F.1.%Self (%Self.1) = param runtime_param2
// CHECK:STDOUT: %return: ref @F.1.%Self (%Self.1) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc12: %.2 = assoc_entity element0, %F.decl [template = constants.%.3]
// CHECK:STDOUT:
@@ -161,8 +164,8 @@ impl D as SelfNested {
// CHECK:STDOUT: %.loc28_36.2: type = struct_type {.x: %Self.2, .y: %.1} [symbolic = %.loc28_36.1 (constants.%.10)]
// CHECK:STDOUT: %.loc28_37.2: %.11 = tuple_literal (%.loc28_16.4, %.loc28_36.2)
// CHECK:STDOUT: %.loc28_37.3: type = converted %.loc28_37.2, constants.%.12 [symbolic = %.loc28_37.1 (constants.%.12)]
// CHECK:STDOUT: %param: @F.4.%.loc28_37.1 (%.12) = param runtime_param0
// CHECK:STDOUT: %x: @F.4.%.loc28_37.1 (%.12) = bind_name x, %param
// CHECK:STDOUT: %x.param: @F.4.%.loc28_37.1 (%.12) = param runtime_param0
// CHECK:STDOUT: %x: @F.4.%.loc28_37.1 (%.12) = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc28: %.13 = assoc_entity element0, %F.decl [template = constants.%.14]
// CHECK:STDOUT:
@@ -178,15 +181,18 @@ impl D as SelfNested {
// CHECK:STDOUT: %self.param_patt: %C = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %x.patt: %C = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %C = param_pattern %x.patt, runtime_param1
// CHECK:STDOUT: %return.patt: %C = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %C = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref.loc20_14: type = name_ref C, file.%C.decl [template = constants.%C]
// CHECK:STDOUT: %C.ref.loc20_20: type = name_ref C, file.%C.decl [template = constants.%C]
// CHECK:STDOUT: %C.ref.loc20_26: type = name_ref C, file.%C.decl [template = constants.%C]
// CHECK:STDOUT: %return: ref %C = var <return slot>
// CHECK:STDOUT: %param.loc20_12: %C = param runtime_param0
// CHECK:STDOUT: %self: %C = bind_name self, %param.loc20_12
// CHECK:STDOUT: %param.loc20_18: %C = param runtime_param1
// CHECK:STDOUT: %x: %C = bind_name x, %param.loc20_18
// CHECK:STDOUT: %self.param: %C = param runtime_param0
// CHECK:STDOUT: %self: %C = bind_name self, %self.param
// CHECK:STDOUT: %x.param: %C = param runtime_param1
// CHECK:STDOUT: %x: %C = bind_name x, %x.param
// CHECK:STDOUT: %return.param: %C = param runtime_param2
// CHECK:STDOUT: %return: ref %C = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc19: <witness> = interface_witness (%F.decl) [template = constants.%.6]
// CHECK:STDOUT:
@@ -201,15 +207,18 @@ impl D as SelfNested {
// CHECK:STDOUT: %self.param_patt: %D = param_pattern %self.patt, runtime_param0
// CHECK:STDOUT: %x.patt: %D = binding_pattern x
// CHECK:STDOUT: %x.param_patt: %D = param_pattern %x.patt, runtime_param1
// CHECK:STDOUT: %return.patt: %D = return_slot_pattern
// CHECK:STDOUT: %return.param_patt: %D = param_pattern %return.patt, runtime_param2
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref.loc24_14: type = name_ref Self, @impl.2.%D.ref [template = constants.%D]
// CHECK:STDOUT: %Self.ref.loc24_23: type = name_ref Self, @impl.2.%D.ref [template = constants.%D]
// CHECK:STDOUT: %Self.ref.loc24_32: type = name_ref Self, @impl.2.%D.ref [template = constants.%D]
// CHECK:STDOUT: %return: ref %D = var <return slot>
// CHECK:STDOUT: %param.loc24_12: %D = param runtime_param0
// CHECK:STDOUT: %self: %D = bind_name self, %param.loc24_12
// CHECK:STDOUT: %param.loc24_21: %D = param runtime_param1
// CHECK:STDOUT: %x: %D = bind_name x, %param.loc24_21
// CHECK:STDOUT: %self.param: %D = param runtime_param0
// CHECK:STDOUT: %self: %D = bind_name self, %self.param
// CHECK:STDOUT: %x.param: %D = param runtime_param1
// CHECK:STDOUT: %x: %D = bind_name x, %x.param
// CHECK:STDOUT: %return.param: %D = param runtime_param2
// CHECK:STDOUT: %return: ref %D = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc23: <witness> = interface_witness (%F.decl) [template = constants.%.8]
// CHECK:STDOUT:
@@ -231,8 +240,8 @@ impl D as SelfNested {
// CHECK:STDOUT: %.loc32_30: type = struct_type {.x: %C, .y: %.1} [template = constants.%.16]
// CHECK:STDOUT: %.loc32_31.1: %.11 = tuple_literal (%.loc32_13, %.loc32_30)
// CHECK:STDOUT: %.loc32_31.2: type = converted %.loc32_31.1, constants.%.17 [template = constants.%.17]
// CHECK:STDOUT: %param: %.17 = param runtime_param0
// CHECK:STDOUT: %x: %.17 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.17 = param runtime_param0
// CHECK:STDOUT: %x: %.17 = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc31: <witness> = interface_witness (%F.decl) [template = constants.%.18]
// CHECK:STDOUT:
@@ -254,8 +263,8 @@ impl D as SelfNested {
// CHECK:STDOUT: %.loc36_36: type = struct_type {.x: %D, .y: %.1} [template = constants.%.20]
// CHECK:STDOUT: %.loc36_37.1: %.11 = tuple_literal (%.loc36_16, %.loc36_36)
// CHECK:STDOUT: %.loc36_37.2: type = converted %.loc36_37.1, constants.%.21 [template = constants.%.21]
// CHECK:STDOUT: %param: %.21 = param runtime_param0
// CHECK:STDOUT: %x: %.21 = bind_name x, %param
// CHECK:STDOUT: %x.param: %.21 = param runtime_param0
// CHECK:STDOUT: %x: %.21 = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc35: <witness> = interface_witness (%F.decl) [template = constants.%.22]
// CHECK:STDOUT:
+1 -1
View File
@@ -44,7 +44,7 @@ impl i32 as I {}
// CHECK:STDOUT: import Core//prelude/operators/comparison
// CHECK:STDOUT: import Core//prelude/types/bool
// CHECK:STDOUT: }
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+9, loaded [template = constants.%Int32]
// CHECK:STDOUT: %import_ref: %Int32.type = import_ref Core//prelude/types, inst+15, loaded [template = constants.%Int32]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {