Make FacetAccessType evaluate to SymbolicBindingType for type-of a BindSymbolicName (#6115)

The SymbolicBindingType refers to the type value that will be
substituted in for the BindSymbolicName, but holds onto the EntityNameId
from the BindSymbolicName instead of (or in addition to, for now) the
instruction.

The EntityNameId will be used to look in the ScopeStack to find the
witnesses either from the BindSymbolicName instruction, or other
instructions that specify `impls` constraints against the EntityName.

This will allow us to have the `T` in `I(T)` resolve to a `.Self`
reference in the type so that we get type equality with the binding's
type: `T:! I(.Self)`.
This commit is contained in:
Dana Jansens
2025-10-06 18:56:43 +00:00
committed by GitHub
parent bd4d5805dd
commit fe020ee08b
237 changed files with 7827 additions and 7586 deletions
+42 -42
View File
@@ -38,25 +38,25 @@ fn F(T:! Empty) {
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %ptr.2b9: type = ptr_type %T.as_type [symbolic]
// CHECK:STDOUT: %require_complete.1f4: <witness> = require_complete_type %ptr.2b9 [symbolic]
// CHECK:STDOUT: %pattern_type.ae3: type = pattern_type %ptr.2b9 [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %ptr.1e6: type = ptr_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %require_complete.fcc: <witness> = require_complete_type %ptr.1e6 [symbolic]
// CHECK:STDOUT: %pattern_type.be3: type = pattern_type %ptr.1e6 [symbolic]
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete]
// CHECK:STDOUT: %type_where: type = facet_type <type where .Self impls <CanDestroy>> [concrete]
// CHECK:STDOUT: %DestroyT: %type_where = bind_symbolic_name DestroyT, 0 [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%DestroyT) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.8a0: %DestroyT.as_type.as.Destroy.impl.Op.type.190 = struct_value () [symbolic]
// CHECK:STDOUT: %facet_value: %type_where = facet_value %ptr.2b9, () [symbolic]
// CHECK:STDOUT: %Destroy.impl_witness.1c6: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.d4f: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.970: %DestroyT.as_type.as.Destroy.impl.Op.type.d4f = struct_value () [symbolic]
// CHECK:STDOUT: %ptr.886: type = ptr_type %ptr.2b9 [symbolic]
// CHECK:STDOUT: %require_complete.67e: <witness> = require_complete_type %ptr.886 [symbolic]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.2b9, (%Destroy.impl_witness.1c6) [symbolic]
// CHECK:STDOUT: %.8dd: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.970, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%DestroyT) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.544: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d = struct_value () [symbolic]
// CHECK:STDOUT: %facet_value: %type_where = facet_value %ptr.1e6, () [symbolic]
// CHECK:STDOUT: %Destroy.impl_witness.90f: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.890: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.57a: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.890 = struct_value () [symbolic]
// CHECK:STDOUT: %ptr.291: type = ptr_type %ptr.1e6 [symbolic]
// CHECK:STDOUT: %require_complete.f53: <witness> = require_complete_type %ptr.291 [symbolic]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.1e6, (%Destroy.impl_witness.90f) [symbolic]
// CHECK:STDOUT: %.a0c: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.57a, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value) [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -66,8 +66,8 @@ fn F(T:! Empty) {
// CHECK:STDOUT: import Core//prelude/...
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
// CHECK:STDOUT: %Core.import_ref.d51: @DestroyT.as_type.as.Destroy.impl.%DestroyT.as_type.as.Destroy.impl.Op.type (%DestroyT.as_type.as.Destroy.impl.Op.type.190) = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [symbolic = @DestroyT.as_type.as.Destroy.impl.%DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.8a0)]
// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Core.import_ref.d51), @DestroyT.as_type.as.Destroy.impl [concrete]
// CHECK:STDOUT: %Core.import_ref.950: @DestroyT.binding.as_type.as.Destroy.impl.%DestroyT.binding.as_type.as.Destroy.impl.Op.type (%DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d) = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [symbolic = @DestroyT.binding.as_type.as.Destroy.impl.%DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.544)]
// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Core.import_ref.950), @DestroyT.binding.as_type.as.Destroy.impl [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -122,42 +122,42 @@ fn F(T:! Empty) {
// CHECK:STDOUT: %T.loc21_6.1: %Empty.type = bind_symbolic_name T, 0 [symbolic = %T.loc21_6.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc22_11.2: type = facet_access_type %T.loc21_6.1 [symbolic = %T.as_type.loc22_11.2 (constants.%T.as_type)]
// CHECK:STDOUT: %ptr.loc22_11.2: type = ptr_type %T.as_type.loc22_11.2 [symbolic = %ptr.loc22_11.2 (constants.%ptr.2b9)]
// CHECK:STDOUT: %require_complete.loc22_11: <witness> = require_complete_type %ptr.loc22_11.2 [symbolic = %require_complete.loc22_11 (constants.%require_complete.1f4)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc22_11.2 [symbolic = %pattern_type (constants.%pattern_type.ae3)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc21_6.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %ptr.loc22_11.2: type = ptr_type %T.binding.as_type [symbolic = %ptr.loc22_11.2 (constants.%ptr.1e6)]
// CHECK:STDOUT: %require_complete.loc22_11: <witness> = require_complete_type %ptr.loc22_11.2 [symbolic = %require_complete.loc22_11 (constants.%require_complete.fcc)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc22_11.2 [symbolic = %pattern_type (constants.%pattern_type.be3)]
// CHECK:STDOUT: %facet_value.loc22_3.2: %type_where = facet_value %ptr.loc22_11.2, () [symbolic = %facet_value.loc22_3.2 (constants.%facet_value)]
// CHECK:STDOUT: %Destroy.impl_witness: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value.loc22_3.2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.1c6)]
// CHECK:STDOUT: %Destroy.impl_witness: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.loc22_3.2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.90f)]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc22_11.2, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)]
// CHECK:STDOUT: %.loc22_3.2: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc22_3.2 (constants.%.8dd)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.loc22_3.2) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.type (constants.%DestroyT.as_type.as.Destroy.impl.Op.type.d4f)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op: @F.%DestroyT.as_type.as.Destroy.impl.Op.type (%DestroyT.as_type.as.Destroy.impl.Op.type.d4f) = struct_value () [symbolic = %DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.970)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.loc22_3.2) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.specific_fn (constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn)]
// CHECK:STDOUT: %ptr.loc22_3: type = ptr_type %ptr.loc22_11.2 [symbolic = %ptr.loc22_3 (constants.%ptr.886)]
// CHECK:STDOUT: %require_complete.loc22_3: <witness> = require_complete_type %ptr.loc22_3 [symbolic = %require_complete.loc22_3 (constants.%require_complete.67e)]
// CHECK:STDOUT: %.loc22_3.2: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc22_3.2 (constants.%.a0c)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.loc22_3.2) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.type (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.type.890)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op: @F.%DestroyT.binding.as_type.as.Destroy.impl.Op.type (%DestroyT.binding.as_type.as.Destroy.impl.Op.type.890) = struct_value () [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.57a)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.loc22_3.2) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn)]
// CHECK:STDOUT: %ptr.loc22_3: type = ptr_type %ptr.loc22_11.2 [symbolic = %ptr.loc22_3 (constants.%ptr.291)]
// CHECK:STDOUT: %require_complete.loc22_3: <witness> = require_complete_type %ptr.loc22_3 [symbolic = %require_complete.loc22_3 (constants.%require_complete.f53)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.ae3) = binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: @F.%pattern_type (%pattern_type.ae3) = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.be3) = binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: @F.%pattern_type (%pattern_type.be3) = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref @F.%ptr.loc22_11.2 (%ptr.2b9) = var %x.var_patt
// CHECK:STDOUT: %.loc22_11.1: type = splice_block %ptr.loc22_11.1 [symbolic = %ptr.loc22_11.2 (constants.%ptr.2b9)] {
// CHECK:STDOUT: %x.var: ref @F.%ptr.loc22_11.2 (%ptr.1e6) = var %x.var_patt
// CHECK:STDOUT: %.loc22_11.1: type = splice_block %ptr.loc22_11.1 [symbolic = %ptr.loc22_11.2 (constants.%ptr.1e6)] {
// CHECK:STDOUT: %T.ref: %Empty.type = name_ref T, %T.loc21_6.2 [symbolic = %T.loc21_6.1 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc22_11.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc22_11.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc22_11.2: type = converted %T.ref, %T.as_type.loc22_11.1 [symbolic = %T.as_type.loc22_11.2 (constants.%T.as_type)]
// CHECK:STDOUT: %ptr.loc22_11.1: type = ptr_type %.loc22_11.2 [symbolic = %ptr.loc22_11.2 (constants.%ptr.2b9)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc22_11.2: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %ptr.loc22_11.1: type = ptr_type %.loc22_11.2 [symbolic = %ptr.loc22_11.2 (constants.%ptr.1e6)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x: ref @F.%ptr.loc22_11.2 (%ptr.2b9) = bind_name x, %x.var
// CHECK:STDOUT: %facet_value.loc22_3.1: %type_where = facet_value constants.%ptr.2b9, () [symbolic = %facet_value.loc22_3.2 (constants.%facet_value)]
// CHECK:STDOUT: %.loc22_3.1: %type_where = converted constants.%ptr.2b9, %facet_value.loc22_3.1 [symbolic = %facet_value.loc22_3.2 (constants.%facet_value)]
// CHECK:STDOUT: %impl.elem0: @F.%.loc22_3.2 (%.8dd) = impl_witness_access constants.%Destroy.impl_witness.1c6, element0 [symbolic = %DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.970)]
// CHECK:STDOUT: %x: ref @F.%ptr.loc22_11.2 (%ptr.1e6) = bind_name x, %x.var
// CHECK:STDOUT: %facet_value.loc22_3.1: %type_where = facet_value constants.%ptr.1e6, () [symbolic = %facet_value.loc22_3.2 (constants.%facet_value)]
// CHECK:STDOUT: %.loc22_3.1: %type_where = converted constants.%ptr.1e6, %facet_value.loc22_3.1 [symbolic = %facet_value.loc22_3.2 (constants.%facet_value)]
// CHECK:STDOUT: %impl.elem0: @F.%.loc22_3.2 (%.a0c) = impl_witness_access constants.%Destroy.impl_witness.90f, element0 [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.57a)]
// CHECK:STDOUT: %bound_method.loc22_3.1: <bound method> = bound_method %x.var, %impl.elem0
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.specific_fn (constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn)]
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn)]
// CHECK:STDOUT: %bound_method.loc22_3.2: <bound method> = bound_method %x.var, %specific_fn
// CHECK:STDOUT: %addr: @F.%ptr.loc22_3 (%ptr.886) = addr_of %x.var
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc22_3.2(%addr)
// CHECK:STDOUT: %addr: @F.%ptr.loc22_3 (%ptr.291) = addr_of %x.var
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc22_3.2(%addr)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
+216 -216
View File
@@ -200,7 +200,7 @@ fn Works() {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self]
// CHECK:STDOUT: %T: %J.type = bind_symbolic_name T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.84b: type = pattern_type %J.type [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %J.lookup_impl_witness.0802bc.1: <witness> = lookup_impl_witness %T, @J [symbolic]
// CHECK:STDOUT: %impl.elem0.312582.1: type = impl_witness_access %J.lookup_impl_witness.0802bc.1, element0 [symbolic]
// CHECK:STDOUT: %S: %impl.elem0.312582.1 = bind_symbolic_name S, 1 [symbolic]
@@ -245,8 +245,8 @@ fn Works() {
// CHECK:STDOUT: %.Self.1: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %T.ref: %J.type = name_ref T, %T.loc8_12.2 [symbolic = %T.loc8_12.1 (constants.%T)]
// CHECK:STDOUT: %U.ref: %J.assoc_type = name_ref U, @U.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %T.as_type.loc8_24.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc8_24.1 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc8_24.2: type = converted %T.ref, %T.as_type.loc8_24.2 [symbolic = %T.as_type.loc8_24.1 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc8_24.2: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %impl.elem0.loc8_24.2: type = impl_witness_access constants.%J.lookup_impl_witness.0802bc.1, element0 [symbolic = %impl.elem0.loc8_24.1 (constants.%impl.elem0.312582.1)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %S.loc8_19.2: @Simple1.%impl.elem0.loc8_24.1 (%impl.elem0.312582.1) = bind_symbolic_name S, 1 [symbolic = %S.loc8_19.1 (constants.%S)]
@@ -289,7 +289,7 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Simple1(%T.loc8_12.2: %J.type, %S.loc8_19.2: @Simple1.%impl.elem0.loc8_24.1 (%impl.elem0.312582.1)) {
// CHECK:STDOUT: %T.loc8_12.1: %J.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.1 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc8_24.1: type = facet_access_type %T.loc8_12.1 [symbolic = %T.as_type.loc8_24.1 (constants.%T.as_type)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc8_12.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %J.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc8_12.1, @J [symbolic = %J.lookup_impl_witness (constants.%J.lookup_impl_witness.0802bc.1)]
// CHECK:STDOUT: %impl.elem0.loc8_24.1: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc8_24.1 (constants.%impl.elem0.312582.1)]
// CHECK:STDOUT: %S.loc8_19.1: @Simple1.%impl.elem0.loc8_24.1 (%impl.elem0.312582.1) = bind_symbolic_name S, 1 [symbolic = %S.loc8_19.1 (constants.%S)]
@@ -324,7 +324,7 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Simple1(constants.%T, constants.%S) {
// CHECK:STDOUT: %T.loc8_12.1 => constants.%T
// CHECK:STDOUT: %T.as_type.loc8_24.1 => constants.%T.as_type
// CHECK:STDOUT: %T.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %J.lookup_impl_witness => constants.%J.lookup_impl_witness.0802bc.1
// CHECK:STDOUT: %impl.elem0.loc8_24.1 => constants.%impl.elem0.312582.1
// CHECK:STDOUT: %S.loc8_19.1 => constants.%S
@@ -357,7 +357,7 @@ fn Works() {
// CHECK:STDOUT: %pattern_type: type = pattern_type %K1.type [concrete]
// CHECK:STDOUT: %Simple2.type: type = fn_type @Simple2 [concrete]
// CHECK:STDOUT: %Simple2: %Simple2.type = struct_value () [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %K1.lookup_impl_witness.5aa361.1: <witness> = lookup_impl_witness %T, @K1 [symbolic]
// CHECK:STDOUT: %.57535a.1: type = fn_type_with_self_type %K1.Q1.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem0.60cefb.1: %.57535a.1 = impl_witness_access %K1.lookup_impl_witness.5aa361.1, element0 [symbolic]
@@ -426,7 +426,7 @@ fn Works() {
// CHECK:STDOUT: %T.loc8_12.1: %K1.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc9_4.2: type = facet_access_type %T.loc8_12.1 [symbolic = %T.as_type.loc9_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc8_12.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %K1.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc8_12.1, @K1 [symbolic = %K1.lookup_impl_witness (constants.%K1.lookup_impl_witness.5aa361.1)]
// CHECK:STDOUT: %.loc9_4.2: type = fn_type_with_self_type constants.%K1.Q1.type, %T.loc8_12.1 [symbolic = %.loc9_4.2 (constants.%.57535a.1)]
// CHECK:STDOUT: %impl.elem0.loc9_4.2: @Simple2.%.loc9_4.2 (%.57535a.1) = impl_witness_access %K1.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_4.2 (constants.%impl.elem0.60cefb.1)]
@@ -436,8 +436,8 @@ fn Works() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %T.ref: %K1.type = name_ref T, %T.loc8_12.2 [symbolic = %T.loc8_12.1 (constants.%T)]
// CHECK:STDOUT: %Q1.ref: %K1.assoc_type = name_ref Q1, @K1.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %T.as_type.loc9_4.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc9_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc9_4.1: type = converted %T.ref, %T.as_type.loc9_4.1 [symbolic = %T.as_type.loc9_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc9_4.1: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %impl.elem0.loc9_4.1: @Simple2.%.loc9_4.2 (%.57535a.1) = impl_witness_access constants.%K1.lookup_impl_witness.5aa361.1, element0 [symbolic = %impl.elem0.loc9_4.2 (constants.%impl.elem0.60cefb.1)]
// CHECK:STDOUT: %specific_impl_fn.loc9_4.1: <specific function> = specific_impl_function %impl.elem0.loc9_4.1, @K1.Q1(constants.%T) [symbolic = %specific_impl_fn.loc9_4.2 (constants.%specific_impl_fn.76c65f.1)]
// CHECK:STDOUT: %.loc9_8: init %empty_tuple.type = call %specific_impl_fn.loc9_4.1()
@@ -494,21 +494,21 @@ fn Works() {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self]
// CHECK:STDOUT: %T: %K2.type = bind_symbolic_name T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.4d9: type = pattern_type %K2.type [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %pattern_type.0e3df3.1: type = pattern_type %T.as_type [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %pattern_type.fe1259.1: type = pattern_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %Simple3.type: type = fn_type @Simple3 [concrete]
// CHECK:STDOUT: %Simple3: %Simple3.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.c496eb.1: <witness> = require_complete_type %T.as_type [symbolic]
// CHECK:STDOUT: %require_complete.77a314.1: <witness> = require_complete_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %K2.lookup_impl_witness: <witness> = lookup_impl_witness %T, @K2 [symbolic]
// CHECK:STDOUT: %.143: type = fn_type_with_self_type %K2.Q2.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem0: %.143 = impl_witness_access %K2.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %specific_impl_fn: <specific function> = specific_impl_function %impl.elem0, @K2.Q2(%T) [symbolic]
// CHECK:STDOUT: %V: %K2.type = bind_symbolic_name V, 0 [symbolic]
// CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic]
// CHECK:STDOUT: %pattern_type.0e3df3.2: type = pattern_type %V.as_type [symbolic]
// CHECK:STDOUT: %V.binding.as_type: type = symbolic_binding_type V, 0, %V [symbolic]
// CHECK:STDOUT: %pattern_type.fe1259.2: type = pattern_type %V.binding.as_type [symbolic]
// CHECK:STDOUT: %Compound3.type: type = fn_type @Compound3 [concrete]
// CHECK:STDOUT: %Compound3: %Compound3.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.c496eb.2: <witness> = require_complete_type %V.as_type [symbolic]
// CHECK:STDOUT: %require_complete.77a314.2: <witness> = require_complete_type %V.binding.as_type [symbolic]
// CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete]
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -533,39 +533,39 @@ fn Works() {
// CHECK:STDOUT: %K2.decl: type = interface_decl @K2 [concrete = constants.%K2.type] {} {}
// CHECK:STDOUT: %Simple3.decl: %Simple3.type = fn_decl @Simple3 [concrete = constants.%Simple3] {
// CHECK:STDOUT: %T.patt: %pattern_type.4d9 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %x.patt: @Simple3.%pattern_type (%pattern_type.0e3df3.1) = binding_pattern x [concrete]
// CHECK:STDOUT: %x.param_patt: @Simple3.%pattern_type (%pattern_type.0e3df3.1) = value_param_pattern %x.patt, call_param0 [concrete]
// CHECK:STDOUT: %x.patt: @Simple3.%pattern_type (%pattern_type.fe1259.1) = binding_pattern x [concrete]
// CHECK:STDOUT: %x.param_patt: @Simple3.%pattern_type (%pattern_type.fe1259.1) = value_param_pattern %x.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc8_16: type = splice_block %K2.ref [concrete = constants.%K2.type] {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %K2.ref: type = name_ref K2, file.%K2.decl [concrete = constants.%K2.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc8_12.2: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.1 (constants.%T)]
// CHECK:STDOUT: %x.param: @Simple3.%T.as_type.loc8_23.1 (%T.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc8_23.1: type = splice_block %.loc8_23.2 [symbolic = %T.as_type.loc8_23.1 (constants.%T.as_type)] {
// CHECK:STDOUT: %x.param: @Simple3.%T.binding.as_type (%T.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc8_23.1: type = splice_block %.loc8_23.2 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)] {
// CHECK:STDOUT: %T.ref: %K2.type = name_ref T, %T.loc8_12.2 [symbolic = %T.loc8_12.1 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc8_23.2: type = facet_access_type %T.ref [symbolic = %T.as_type.loc8_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc8_23.2: type = converted %T.ref, %T.as_type.loc8_23.2 [symbolic = %T.as_type.loc8_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc8_23.2: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x: @Simple3.%T.as_type.loc8_23.1 (%T.as_type) = bind_name x, %x.param
// CHECK:STDOUT: %x: @Simple3.%T.binding.as_type (%T.binding.as_type) = bind_name x, %x.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %Compound3.decl: %Compound3.type = fn_decl @Compound3 [concrete = constants.%Compound3] {
// CHECK:STDOUT: %V.patt: %pattern_type.4d9 = symbolic_binding_pattern V, 0 [concrete]
// CHECK:STDOUT: %y.patt: @Compound3.%pattern_type (%pattern_type.0e3df3.2) = binding_pattern y [concrete]
// CHECK:STDOUT: %y.param_patt: @Compound3.%pattern_type (%pattern_type.0e3df3.2) = value_param_pattern %y.patt, call_param0 [concrete]
// CHECK:STDOUT: %y.patt: @Compound3.%pattern_type (%pattern_type.fe1259.2) = binding_pattern y [concrete]
// CHECK:STDOUT: %y.param_patt: @Compound3.%pattern_type (%pattern_type.fe1259.2) = value_param_pattern %y.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc14_18: type = splice_block %K2.ref.loc14 [concrete = constants.%K2.type] {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %K2.ref.loc14: type = name_ref K2, file.%K2.decl [concrete = constants.%K2.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %V.loc14_14.2: %K2.type = bind_symbolic_name V, 0 [symbolic = %V.loc14_14.1 (constants.%V)]
// CHECK:STDOUT: %y.param: @Compound3.%V.as_type.loc14_25.1 (%V.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc14_25.1: type = splice_block %.loc14_25.2 [symbolic = %V.as_type.loc14_25.1 (constants.%V.as_type)] {
// CHECK:STDOUT: %y.param: @Compound3.%V.binding.as_type (%V.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc14_25.1: type = splice_block %.loc14_25.2 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)] {
// CHECK:STDOUT: %V.ref: %K2.type = name_ref V, %V.loc14_14.2 [symbolic = %V.loc14_14.1 (constants.%V)]
// CHECK:STDOUT: %V.as_type.loc14_25.2: type = facet_access_type %V.ref [symbolic = %V.as_type.loc14_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %.loc14_25.2: type = converted %V.ref, %V.as_type.loc14_25.2 [symbolic = %V.as_type.loc14_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %V.as_type: type = facet_access_type %V.ref [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %.loc14_25.2: type = converted %V.ref, %V.as_type [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %y: @Compound3.%V.as_type.loc14_25.1 (%V.as_type) = bind_name y, %y.param
// CHECK:STDOUT: %y: @Compound3.%V.binding.as_type (%V.binding.as_type) = bind_name y, %y.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -586,19 +586,19 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Simple3(%T.loc8_12.2: %K2.type) {
// CHECK:STDOUT: %T.loc8_12.1: %K2.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_12.1 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc8_23.1: type = facet_access_type %T.loc8_12.1 [symbolic = %T.as_type.loc8_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %T.as_type.loc8_23.1 [symbolic = %pattern_type (constants.%pattern_type.0e3df3.1)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc8_12.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %T.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.fe1259.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.as_type.loc8_23.1 [symbolic = %require_complete (constants.%require_complete.c496eb.1)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.binding.as_type [symbolic = %require_complete (constants.%require_complete.77a314.1)]
// CHECK:STDOUT: %K2.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc8_12.1, @K2 [symbolic = %K2.lookup_impl_witness (constants.%K2.lookup_impl_witness)]
// CHECK:STDOUT: %.loc9_4: type = fn_type_with_self_type constants.%K2.Q2.type, %T.loc8_12.1 [symbolic = %.loc9_4 (constants.%.143)]
// CHECK:STDOUT: %impl.elem0.loc9_4.2: @Simple3.%.loc9_4 (%.143) = impl_witness_access %K2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc9_4.2: <specific function> = specific_impl_function %impl.elem0.loc9_4.2, @K2.Q2(%T.loc8_12.1) [symbolic = %specific_impl_fn.loc9_4.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%x.param: @Simple3.%T.as_type.loc8_23.1 (%T.as_type)) {
// CHECK:STDOUT: fn(%x.param: @Simple3.%T.binding.as_type (%T.binding.as_type)) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %x.ref: @Simple3.%T.as_type.loc8_23.1 (%T.as_type) = name_ref x, %x
// CHECK:STDOUT: %x.ref: @Simple3.%T.binding.as_type (%T.binding.as_type) = name_ref x, %x
// CHECK:STDOUT: %Q2.ref: %K2.assoc_type = name_ref Q2, @K2.%assoc0 [concrete = constants.%assoc0.d67]
// CHECK:STDOUT: %impl.elem0.loc9_4.1: @Simple3.%.loc9_4 (%.143) = impl_witness_access constants.%K2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc9_4.1: <specific function> = specific_impl_function %impl.elem0.loc9_4.1, @K2.Q2(constants.%T) [symbolic = %specific_impl_fn.loc9_4.2 (constants.%specific_impl_fn)]
@@ -609,15 +609,15 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Compound3(%V.loc14_14.2: %K2.type) {
// CHECK:STDOUT: %V.loc14_14.1: %K2.type = bind_symbolic_name V, 0 [symbolic = %V.loc14_14.1 (constants.%V)]
// CHECK:STDOUT: %V.as_type.loc14_25.1: type = facet_access_type %V.loc14_14.1 [symbolic = %V.as_type.loc14_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %V.as_type.loc14_25.1 [symbolic = %pattern_type (constants.%pattern_type.0e3df3.2)]
// CHECK:STDOUT: %V.binding.as_type: type = symbolic_binding_type V, 0, %V.loc14_14.1 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %V.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.fe1259.2)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %V.as_type.loc14_25.1 [symbolic = %require_complete (constants.%require_complete.c496eb.2)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %V.binding.as_type [symbolic = %require_complete (constants.%require_complete.77a314.2)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%y.param: @Compound3.%V.as_type.loc14_25.1 (%V.as_type)) {
// CHECK:STDOUT: fn(%y.param: @Compound3.%V.binding.as_type (%V.binding.as_type)) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %y.ref: @Compound3.%V.as_type.loc14_25.1 (%V.as_type) = name_ref y, %y
// CHECK:STDOUT: %y.ref: @Compound3.%V.binding.as_type (%V.binding.as_type) = name_ref y, %y
// CHECK:STDOUT: %K2.ref.loc22: type = name_ref K2, file.%K2.decl [concrete = constants.%K2.type]
// CHECK:STDOUT: %Q2.ref: %K2.assoc_type = name_ref Q2, @K2.%assoc0 [concrete = constants.%assoc0.d67]
// CHECK:STDOUT: %.loc22: %K2.type = converted %y.ref, <error> [concrete = <error>]
@@ -629,16 +629,16 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Simple3(constants.%T) {
// CHECK:STDOUT: %T.loc8_12.1 => constants.%T
// CHECK:STDOUT: %T.as_type.loc8_23.1 => constants.%T.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0e3df3.1
// CHECK:STDOUT: %T.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fe1259.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @K2.Q2(constants.%T) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Compound3(constants.%V) {
// CHECK:STDOUT: %V.loc14_14.1 => constants.%V
// CHECK:STDOUT: %V.as_type.loc14_25.1 => constants.%V.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0e3df3.2
// CHECK:STDOUT: %V.binding.as_type => constants.%V.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fe1259.2
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- instance.carbon
@@ -646,15 +646,15 @@ fn Works() {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %L1.type: type = facet_type <@L1> [concrete]
// CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type.b73027.1: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.ca8092.1: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %L1.R1.type: type = fn_type @L1.R1 [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %L1.R1: %L1.R1.type = struct_value () [concrete]
// CHECK:STDOUT: %L1.assoc_type: type = assoc_entity_type @L1 [concrete]
// CHECK:STDOUT: %assoc0: %L1.assoc_type = assoc_entity element0, @L1.%L1.R1.decl [concrete]
// CHECK:STDOUT: %ptr.be473c.1: type = ptr_type %Self.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.c147e0.1: type = pattern_type %ptr.be473c.1 [symbolic]
// CHECK:STDOUT: %ptr.24e2cb.1: type = ptr_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.771b92.1: type = pattern_type %ptr.24e2cb.1 [symbolic]
// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete]
// CHECK:STDOUT: %L1.S1.type: type = fn_type @L1.S1 [concrete]
// CHECK:STDOUT: %L1.S1: %L1.S1.type = struct_value () [concrete]
@@ -663,14 +663,14 @@ fn Works() {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self]
// CHECK:STDOUT: %T: %L1.type = bind_symbolic_name T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.e3e: type = pattern_type %L1.type [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %pattern_type.b73027.2: type = pattern_type %T.as_type [symbolic]
// CHECK:STDOUT: %ptr.be473c.2: type = ptr_type %T.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.c147e0.2: type = pattern_type %ptr.be473c.2 [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %pattern_type.ca8092.2: type = pattern_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %ptr.24e2cb.2: type = ptr_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.771b92.2: type = pattern_type %ptr.24e2cb.2 [symbolic]
// CHECK:STDOUT: %Simple4.type: type = fn_type @Simple4 [concrete]
// CHECK:STDOUT: %Simple4: %Simple4.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.7cc52f.1: <witness> = require_complete_type %T.as_type [symbolic]
// CHECK:STDOUT: %require_complete.b75e15.1: <witness> = require_complete_type %ptr.be473c.2 [symbolic]
// CHECK:STDOUT: %require_complete.ee4571.1: <witness> = require_complete_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %require_complete.99d4b7.1: <witness> = require_complete_type %ptr.24e2cb.2 [symbolic]
// CHECK:STDOUT: %L1.lookup_impl_witness.771a6e.1: <witness> = lookup_impl_witness %T, @L1 [symbolic]
// CHECK:STDOUT: %.ce9ba2.1: type = fn_type_with_self_type %L1.R1.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem0.8eac48.1: %.ce9ba2.1 = impl_witness_access %L1.lookup_impl_witness.771a6e.1, element0 [symbolic]
@@ -679,14 +679,14 @@ fn Works() {
// CHECK:STDOUT: %impl.elem1.d265e8.1: %.db2f57.1 = impl_witness_access %L1.lookup_impl_witness.771a6e.1, element1 [symbolic]
// CHECK:STDOUT: %specific_impl_fn.5bb1dd.1: <specific function> = specific_impl_function %impl.elem1.d265e8.1, @L1.S1(%T) [symbolic]
// CHECK:STDOUT: %V: %L1.type = bind_symbolic_name V, 0 [symbolic]
// CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic]
// CHECK:STDOUT: %pattern_type.b73027.3: type = pattern_type %V.as_type [symbolic]
// CHECK:STDOUT: %ptr.be473c.3: type = ptr_type %V.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.c147e0.3: type = pattern_type %ptr.be473c.3 [symbolic]
// CHECK:STDOUT: %V.binding.as_type: type = symbolic_binding_type V, 0, %V [symbolic]
// CHECK:STDOUT: %pattern_type.ca8092.3: type = pattern_type %V.binding.as_type [symbolic]
// CHECK:STDOUT: %ptr.24e2cb.3: type = ptr_type %V.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.771b92.3: type = pattern_type %ptr.24e2cb.3 [symbolic]
// CHECK:STDOUT: %Compound4.type: type = fn_type @Compound4 [concrete]
// CHECK:STDOUT: %Compound4: %Compound4.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.7cc52f.2: <witness> = require_complete_type %V.as_type [symbolic]
// CHECK:STDOUT: %require_complete.b75e15.2: <witness> = require_complete_type %ptr.be473c.3 [symbolic]
// CHECK:STDOUT: %require_complete.ee4571.2: <witness> = require_complete_type %V.binding.as_type [symbolic]
// CHECK:STDOUT: %require_complete.99d4b7.2: <witness> = require_complete_type %ptr.24e2cb.3 [symbolic]
// CHECK:STDOUT: %L1.lookup_impl_witness.771a6e.2: <witness> = lookup_impl_witness %V, @L1 [symbolic]
// CHECK:STDOUT: %.ce9ba2.2: type = fn_type_with_self_type %L1.R1.type, %V [symbolic]
// CHECK:STDOUT: %impl.elem0.8eac48.2: %.ce9ba2.2 = impl_witness_access %L1.lookup_impl_witness.771a6e.2, element0 [symbolic]
@@ -714,90 +714,90 @@ fn Works() {
// CHECK:STDOUT: %L1.decl: type = interface_decl @L1 [concrete = constants.%L1.type] {} {}
// CHECK:STDOUT: %Simple4.decl: %Simple4.type = fn_decl @Simple4 [concrete = constants.%Simple4] {
// CHECK:STDOUT: %T.patt: %pattern_type.e3e = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %x.patt: @Simple4.%pattern_type.loc9_20 (%pattern_type.b73027.2) = binding_pattern x [concrete]
// CHECK:STDOUT: %x.param_patt: @Simple4.%pattern_type.loc9_20 (%pattern_type.b73027.2) = value_param_pattern %x.patt, call_param0 [concrete]
// CHECK:STDOUT: %p.patt: @Simple4.%pattern_type.loc9_26 (%pattern_type.c147e0.2) = binding_pattern p [concrete]
// CHECK:STDOUT: %p.param_patt: @Simple4.%pattern_type.loc9_26 (%pattern_type.c147e0.2) = value_param_pattern %p.patt, call_param1 [concrete]
// CHECK:STDOUT: %x.patt: @Simple4.%pattern_type.loc9_20 (%pattern_type.ca8092.2) = binding_pattern x [concrete]
// CHECK:STDOUT: %x.param_patt: @Simple4.%pattern_type.loc9_20 (%pattern_type.ca8092.2) = value_param_pattern %x.patt, call_param0 [concrete]
// CHECK:STDOUT: %p.patt: @Simple4.%pattern_type.loc9_26 (%pattern_type.771b92.2) = binding_pattern p [concrete]
// CHECK:STDOUT: %p.param_patt: @Simple4.%pattern_type.loc9_26 (%pattern_type.771b92.2) = value_param_pattern %p.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc9_16: type = splice_block %L1.ref [concrete = constants.%L1.type] {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %L1.ref: type = name_ref L1, file.%L1.decl [concrete = constants.%L1.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc9_12.2: %L1.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_12.1 (constants.%T)]
// CHECK:STDOUT: %x.param: @Simple4.%T.as_type.loc9_23.1 (%T.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc9_23.1: type = splice_block %.loc9_23.2 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)] {
// CHECK:STDOUT: %x.param: @Simple4.%T.binding.as_type (%T.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc9_23.1: type = splice_block %.loc9_23.2 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)] {
// CHECK:STDOUT: %T.ref.loc9_23: %L1.type = name_ref T, %T.loc9_12.2 [symbolic = %T.loc9_12.1 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc9_23.2: type = facet_access_type %T.ref.loc9_23 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc9_23.2: type = converted %T.ref.loc9_23, %T.as_type.loc9_23.2 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type.loc9_23: type = facet_access_type %T.ref.loc9_23 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc9_23.2: type = converted %T.ref.loc9_23, %T.as_type.loc9_23 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x: @Simple4.%T.as_type.loc9_23.1 (%T.as_type) = bind_name x, %x.param
// CHECK:STDOUT: %p.param: @Simple4.%ptr.loc9_30.1 (%ptr.be473c.2) = value_param call_param1
// CHECK:STDOUT: %.loc9_30.1: type = splice_block %ptr.loc9_30.2 [symbolic = %ptr.loc9_30.1 (constants.%ptr.be473c.2)] {
// CHECK:STDOUT: %x: @Simple4.%T.binding.as_type (%T.binding.as_type) = bind_name x, %x.param
// CHECK:STDOUT: %p.param: @Simple4.%ptr.loc9_30.1 (%ptr.24e2cb.2) = value_param call_param1
// CHECK:STDOUT: %.loc9_30.1: type = splice_block %ptr.loc9_30.2 [symbolic = %ptr.loc9_30.1 (constants.%ptr.24e2cb.2)] {
// CHECK:STDOUT: %T.ref.loc9_29: %L1.type = name_ref T, %T.loc9_12.2 [symbolic = %T.loc9_12.1 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc9_30: type = facet_access_type %T.ref.loc9_29 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc9_30.2: type = converted %T.ref.loc9_29, %T.as_type.loc9_30 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %ptr.loc9_30.2: type = ptr_type %.loc9_30.2 [symbolic = %ptr.loc9_30.1 (constants.%ptr.be473c.2)]
// CHECK:STDOUT: %T.as_type.loc9_30: type = facet_access_type %T.ref.loc9_29 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc9_30.2: type = converted %T.ref.loc9_29, %T.as_type.loc9_30 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %ptr.loc9_30.2: type = ptr_type %.loc9_30.2 [symbolic = %ptr.loc9_30.1 (constants.%ptr.24e2cb.2)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %p: @Simple4.%ptr.loc9_30.1 (%ptr.be473c.2) = bind_name p, %p.param
// CHECK:STDOUT: %p: @Simple4.%ptr.loc9_30.1 (%ptr.24e2cb.2) = bind_name p, %p.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %Compound4.decl: %Compound4.type = fn_decl @Compound4 [concrete = constants.%Compound4] {
// CHECK:STDOUT: %V.patt: %pattern_type.e3e = symbolic_binding_pattern V, 0 [concrete]
// CHECK:STDOUT: %y.patt: @Compound4.%pattern_type.loc15_22 (%pattern_type.b73027.3) = binding_pattern y [concrete]
// CHECK:STDOUT: %y.param_patt: @Compound4.%pattern_type.loc15_22 (%pattern_type.b73027.3) = value_param_pattern %y.patt, call_param0 [concrete]
// CHECK:STDOUT: %p.patt: @Compound4.%pattern_type.loc15_28 (%pattern_type.c147e0.3) = binding_pattern p [concrete]
// CHECK:STDOUT: %p.param_patt: @Compound4.%pattern_type.loc15_28 (%pattern_type.c147e0.3) = value_param_pattern %p.patt, call_param1 [concrete]
// CHECK:STDOUT: %y.patt: @Compound4.%pattern_type.loc15_22 (%pattern_type.ca8092.3) = binding_pattern y [concrete]
// CHECK:STDOUT: %y.param_patt: @Compound4.%pattern_type.loc15_22 (%pattern_type.ca8092.3) = value_param_pattern %y.patt, call_param0 [concrete]
// CHECK:STDOUT: %p.patt: @Compound4.%pattern_type.loc15_28 (%pattern_type.771b92.3) = binding_pattern p [concrete]
// CHECK:STDOUT: %p.param_patt: @Compound4.%pattern_type.loc15_28 (%pattern_type.771b92.3) = value_param_pattern %p.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc15_18: type = splice_block %L1.ref.loc15 [concrete = constants.%L1.type] {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %L1.ref.loc15: type = name_ref L1, file.%L1.decl [concrete = constants.%L1.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %V.loc15_14.2: %L1.type = bind_symbolic_name V, 0 [symbolic = %V.loc15_14.1 (constants.%V)]
// CHECK:STDOUT: %y.param: @Compound4.%V.as_type.loc15_25.1 (%V.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc15_25.1: type = splice_block %.loc15_25.2 [symbolic = %V.as_type.loc15_25.1 (constants.%V.as_type)] {
// CHECK:STDOUT: %y.param: @Compound4.%V.binding.as_type (%V.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc15_25.1: type = splice_block %.loc15_25.2 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)] {
// CHECK:STDOUT: %V.ref.loc15_25: %L1.type = name_ref V, %V.loc15_14.2 [symbolic = %V.loc15_14.1 (constants.%V)]
// CHECK:STDOUT: %V.as_type.loc15_25.2: type = facet_access_type %V.ref.loc15_25 [symbolic = %V.as_type.loc15_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %.loc15_25.2: type = converted %V.ref.loc15_25, %V.as_type.loc15_25.2 [symbolic = %V.as_type.loc15_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %V.as_type.loc15_25: type = facet_access_type %V.ref.loc15_25 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %.loc15_25.2: type = converted %V.ref.loc15_25, %V.as_type.loc15_25 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %y: @Compound4.%V.as_type.loc15_25.1 (%V.as_type) = bind_name y, %y.param
// CHECK:STDOUT: %p.param: @Compound4.%ptr.loc15_32.1 (%ptr.be473c.3) = value_param call_param1
// CHECK:STDOUT: %.loc15_32.1: type = splice_block %ptr.loc15_32.2 [symbolic = %ptr.loc15_32.1 (constants.%ptr.be473c.3)] {
// CHECK:STDOUT: %y: @Compound4.%V.binding.as_type (%V.binding.as_type) = bind_name y, %y.param
// CHECK:STDOUT: %p.param: @Compound4.%ptr.loc15_32.1 (%ptr.24e2cb.3) = value_param call_param1
// CHECK:STDOUT: %.loc15_32.1: type = splice_block %ptr.loc15_32.2 [symbolic = %ptr.loc15_32.1 (constants.%ptr.24e2cb.3)] {
// CHECK:STDOUT: %V.ref.loc15_31: %L1.type = name_ref V, %V.loc15_14.2 [symbolic = %V.loc15_14.1 (constants.%V)]
// CHECK:STDOUT: %V.as_type.loc15_32: type = facet_access_type %V.ref.loc15_31 [symbolic = %V.as_type.loc15_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %.loc15_32.2: type = converted %V.ref.loc15_31, %V.as_type.loc15_32 [symbolic = %V.as_type.loc15_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %ptr.loc15_32.2: type = ptr_type %.loc15_32.2 [symbolic = %ptr.loc15_32.1 (constants.%ptr.be473c.3)]
// CHECK:STDOUT: %V.as_type.loc15_32: type = facet_access_type %V.ref.loc15_31 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %.loc15_32.2: type = converted %V.ref.loc15_31, %V.as_type.loc15_32 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %ptr.loc15_32.2: type = ptr_type %.loc15_32.2 [symbolic = %ptr.loc15_32.1 (constants.%ptr.24e2cb.3)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %p: @Compound4.%ptr.loc15_32.1 (%ptr.be473c.3) = bind_name p, %p.param
// CHECK:STDOUT: %p: @Compound4.%ptr.loc15_32.1 (%ptr.24e2cb.3) = bind_name p, %p.param
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @L1 {
// CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %L1.R1.decl: %L1.R1.type = fn_decl @L1.R1 [concrete = constants.%L1.R1] {
// CHECK:STDOUT: %self.patt: @L1.R1.%pattern_type (%pattern_type.b73027.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L1.R1.%pattern_type (%pattern_type.b73027.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @L1.R1.%pattern_type (%pattern_type.ca8092.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L1.R1.%pattern_type (%pattern_type.ca8092.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @L1.R1.%Self.as_type.loc4_15.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc4_15.1: type = splice_block %.loc4_15.2 [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @L1.R1.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc4_15.1: type = splice_block %.loc4_15.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %L1.type = name_ref Self, @L1.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc4_15.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc4_15.2: type = converted %Self.ref, %Self.as_type.loc4_15.2 [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc4_15.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @L1.R1.%Self.as_type.loc4_15.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @L1.R1.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %L1.assoc_type = assoc_entity element0, %L1.R1.decl [concrete = constants.%assoc0]
// CHECK:STDOUT: %L1.S1.decl: %L1.S1.type = fn_decl @L1.S1 [concrete = constants.%L1.S1] {
// CHECK:STDOUT: %self.patt: @L1.S1.%pattern_type (%pattern_type.c147e0.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L1.S1.%pattern_type (%pattern_type.c147e0.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @L1.S1.%pattern_type (%pattern_type.771b92.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L1.S1.%pattern_type (%pattern_type.771b92.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %.loc5_9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @L1.S1.%ptr.loc5_24.1 (%ptr.be473c.1) = value_param call_param0
// CHECK:STDOUT: %.loc5_24.1: type = splice_block %ptr.loc5_24.2 [symbolic = %ptr.loc5_24.1 (constants.%ptr.be473c.1)] {
// CHECK:STDOUT: %self.param: @L1.S1.%ptr.loc5_24.1 (%ptr.24e2cb.1) = value_param call_param0
// CHECK:STDOUT: %.loc5_24.1: type = splice_block %ptr.loc5_24.2 [symbolic = %ptr.loc5_24.1 (constants.%ptr.24e2cb.1)] {
// CHECK:STDOUT: %Self.ref: %L1.type = name_ref Self, @L1.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc5_24.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc5_24.2: type = converted %Self.ref, %Self.as_type.loc5_24.2 [symbolic = %Self.as_type.loc5_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %ptr.loc5_24.2: type = ptr_type %.loc5_24.2 [symbolic = %ptr.loc5_24.1 (constants.%ptr.be473c.1)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc5_24.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %ptr.loc5_24.2: type = ptr_type %.loc5_24.2 [symbolic = %ptr.loc5_24.1 (constants.%ptr.24e2cb.1)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @L1.S1.%ptr.loc5_24.1 (%ptr.be473c.1) = bind_name self, %self.param
// CHECK:STDOUT: %self: @L1.S1.%ptr.loc5_24.1 (%ptr.24e2cb.1) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc1: %L1.assoc_type = assoc_entity element1, %L1.S1.decl [concrete = constants.%assoc1]
// CHECK:STDOUT:
@@ -810,31 +810,31 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @L1.R1(@L1.%Self: %L1.type) {
// CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc4_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_15.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc4_15.1 [symbolic = %pattern_type (constants.%pattern_type.b73027.1)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.ca8092.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @L1.R1.%Self.as_type.loc4_15.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @L1.R1.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @L1.S1(@L1.%Self: %L1.type) {
// CHECK:STDOUT: %Self: %L1.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc5_24.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %ptr.loc5_24.1: type = ptr_type %Self.as_type.loc5_24.1 [symbolic = %ptr.loc5_24.1 (constants.%ptr.be473c.1)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc5_24.1 [symbolic = %pattern_type (constants.%pattern_type.c147e0.1)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %ptr.loc5_24.1: type = ptr_type %Self.binding.as_type [symbolic = %ptr.loc5_24.1 (constants.%ptr.24e2cb.1)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc5_24.1 [symbolic = %pattern_type (constants.%pattern_type.771b92.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @L1.S1.%ptr.loc5_24.1 (%ptr.be473c.1));
// CHECK:STDOUT: fn(%self.param: @L1.S1.%ptr.loc5_24.1 (%ptr.24e2cb.1));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Simple4(%T.loc9_12.2: %L1.type) {
// CHECK:STDOUT: %T.loc9_12.1: %L1.type = bind_symbolic_name T, 0 [symbolic = %T.loc9_12.1 (constants.%T)]
// CHECK:STDOUT: %T.as_type.loc9_23.1: type = facet_access_type %T.loc9_12.1 [symbolic = %T.as_type.loc9_23.1 (constants.%T.as_type)]
// CHECK:STDOUT: %pattern_type.loc9_20: type = pattern_type %T.as_type.loc9_23.1 [symbolic = %pattern_type.loc9_20 (constants.%pattern_type.b73027.2)]
// CHECK:STDOUT: %ptr.loc9_30.1: type = ptr_type %T.as_type.loc9_23.1 [symbolic = %ptr.loc9_30.1 (constants.%ptr.be473c.2)]
// CHECK:STDOUT: %pattern_type.loc9_26: type = pattern_type %ptr.loc9_30.1 [symbolic = %pattern_type.loc9_26 (constants.%pattern_type.c147e0.2)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc9_12.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %pattern_type.loc9_20: type = pattern_type %T.binding.as_type [symbolic = %pattern_type.loc9_20 (constants.%pattern_type.ca8092.2)]
// CHECK:STDOUT: %ptr.loc9_30.1: type = ptr_type %T.binding.as_type [symbolic = %ptr.loc9_30.1 (constants.%ptr.24e2cb.2)]
// CHECK:STDOUT: %pattern_type.loc9_26: type = pattern_type %ptr.loc9_30.1 [symbolic = %pattern_type.loc9_26 (constants.%pattern_type.771b92.2)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete.loc9_21: <witness> = require_complete_type %T.as_type.loc9_23.1 [symbolic = %require_complete.loc9_21 (constants.%require_complete.7cc52f.1)]
// CHECK:STDOUT: %require_complete.loc9_27: <witness> = require_complete_type %ptr.loc9_30.1 [symbolic = %require_complete.loc9_27 (constants.%require_complete.b75e15.1)]
// CHECK:STDOUT: %require_complete.loc9_21: <witness> = require_complete_type %T.binding.as_type [symbolic = %require_complete.loc9_21 (constants.%require_complete.ee4571.1)]
// CHECK:STDOUT: %require_complete.loc9_27: <witness> = require_complete_type %ptr.loc9_30.1 [symbolic = %require_complete.loc9_27 (constants.%require_complete.99d4b7.1)]
// CHECK:STDOUT: %L1.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc9_12.1, @L1 [symbolic = %L1.lookup_impl_witness (constants.%L1.lookup_impl_witness.771a6e.1)]
// CHECK:STDOUT: %.loc10_4: type = fn_type_with_self_type constants.%L1.R1.type, %T.loc9_12.1 [symbolic = %.loc10_4 (constants.%.ce9ba2.1)]
// CHECK:STDOUT: %impl.elem0.loc10_4.2: @Simple4.%.loc10_4 (%.ce9ba2.1) = impl_witness_access %L1.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc10_4.2 (constants.%impl.elem0.8eac48.1)]
@@ -843,23 +843,23 @@ fn Works() {
// CHECK:STDOUT: %impl.elem1.loc11_4.2: @Simple4.%.loc11_4.2 (%.db2f57.1) = impl_witness_access %L1.lookup_impl_witness, element1 [symbolic = %impl.elem1.loc11_4.2 (constants.%impl.elem1.d265e8.1)]
// CHECK:STDOUT: %specific_impl_fn.loc11_4.2: <specific function> = specific_impl_function %impl.elem1.loc11_4.2, @L1.S1(%T.loc9_12.1) [symbolic = %specific_impl_fn.loc11_4.2 (constants.%specific_impl_fn.5bb1dd.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%x.param: @Simple4.%T.as_type.loc9_23.1 (%T.as_type), %p.param: @Simple4.%ptr.loc9_30.1 (%ptr.be473c.2)) {
// CHECK:STDOUT: fn(%x.param: @Simple4.%T.binding.as_type (%T.binding.as_type), %p.param: @Simple4.%ptr.loc9_30.1 (%ptr.24e2cb.2)) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %x.ref: @Simple4.%T.as_type.loc9_23.1 (%T.as_type) = name_ref x, %x
// CHECK:STDOUT: %x.ref: @Simple4.%T.binding.as_type (%T.binding.as_type) = name_ref x, %x
// CHECK:STDOUT: %R1.ref: %L1.assoc_type = name_ref R1, @L1.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %impl.elem0.loc10_4.1: @Simple4.%.loc10_4 (%.ce9ba2.1) = impl_witness_access constants.%L1.lookup_impl_witness.771a6e.1, element0 [symbolic = %impl.elem0.loc10_4.2 (constants.%impl.elem0.8eac48.1)]
// CHECK:STDOUT: %bound_method.loc10_4: <bound method> = bound_method %x.ref, %impl.elem0.loc10_4.1
// CHECK:STDOUT: %specific_impl_fn.loc10_4.1: <specific function> = specific_impl_function %impl.elem0.loc10_4.1, @L1.R1(constants.%T) [symbolic = %specific_impl_fn.loc10_4.2 (constants.%specific_impl_fn.239e4d.1)]
// CHECK:STDOUT: %bound_method.loc10_8: <bound method> = bound_method %x.ref, %specific_impl_fn.loc10_4.1
// CHECK:STDOUT: %.loc10_8: init %empty_tuple.type = call %bound_method.loc10_8(%x.ref)
// CHECK:STDOUT: %p.ref: @Simple4.%ptr.loc9_30.1 (%ptr.be473c.2) = name_ref p, %p
// CHECK:STDOUT: %.loc11_4.1: ref @Simple4.%T.as_type.loc9_23.1 (%T.as_type) = deref %p.ref
// CHECK:STDOUT: %p.ref: @Simple4.%ptr.loc9_30.1 (%ptr.24e2cb.2) = name_ref p, %p
// CHECK:STDOUT: %.loc11_4.1: ref @Simple4.%T.binding.as_type (%T.binding.as_type) = deref %p.ref
// CHECK:STDOUT: %S1.ref: %L1.assoc_type = name_ref S1, @L1.%assoc1 [concrete = constants.%assoc1]
// CHECK:STDOUT: %impl.elem1.loc11_4.1: @Simple4.%.loc11_4.2 (%.db2f57.1) = impl_witness_access constants.%L1.lookup_impl_witness.771a6e.1, element1 [symbolic = %impl.elem1.loc11_4.2 (constants.%impl.elem1.d265e8.1)]
// CHECK:STDOUT: %bound_method.loc11_4: <bound method> = bound_method %.loc11_4.1, %impl.elem1.loc11_4.1
// CHECK:STDOUT: %specific_impl_fn.loc11_4.1: <specific function> = specific_impl_function %impl.elem1.loc11_4.1, @L1.S1(constants.%T) [symbolic = %specific_impl_fn.loc11_4.2 (constants.%specific_impl_fn.5bb1dd.1)]
// CHECK:STDOUT: %bound_method.loc11_9: <bound method> = bound_method %.loc11_4.1, %specific_impl_fn.loc11_4.1
// CHECK:STDOUT: %addr: @Simple4.%ptr.loc9_30.1 (%ptr.be473c.2) = addr_of %.loc11_4.1
// CHECK:STDOUT: %addr: @Simple4.%ptr.loc9_30.1 (%ptr.24e2cb.2) = addr_of %.loc11_4.1
// CHECK:STDOUT: %.loc11_9: init %empty_tuple.type = call %bound_method.loc11_9(%addr)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
@@ -867,14 +867,14 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Compound4(%V.loc15_14.2: %L1.type) {
// CHECK:STDOUT: %V.loc15_14.1: %L1.type = bind_symbolic_name V, 0 [symbolic = %V.loc15_14.1 (constants.%V)]
// CHECK:STDOUT: %V.as_type.loc15_25.1: type = facet_access_type %V.loc15_14.1 [symbolic = %V.as_type.loc15_25.1 (constants.%V.as_type)]
// CHECK:STDOUT: %pattern_type.loc15_22: type = pattern_type %V.as_type.loc15_25.1 [symbolic = %pattern_type.loc15_22 (constants.%pattern_type.b73027.3)]
// CHECK:STDOUT: %ptr.loc15_32.1: type = ptr_type %V.as_type.loc15_25.1 [symbolic = %ptr.loc15_32.1 (constants.%ptr.be473c.3)]
// CHECK:STDOUT: %pattern_type.loc15_28: type = pattern_type %ptr.loc15_32.1 [symbolic = %pattern_type.loc15_28 (constants.%pattern_type.c147e0.3)]
// CHECK:STDOUT: %V.binding.as_type: type = symbolic_binding_type V, 0, %V.loc15_14.1 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %pattern_type.loc15_22: type = pattern_type %V.binding.as_type [symbolic = %pattern_type.loc15_22 (constants.%pattern_type.ca8092.3)]
// CHECK:STDOUT: %ptr.loc15_32.1: type = ptr_type %V.binding.as_type [symbolic = %ptr.loc15_32.1 (constants.%ptr.24e2cb.3)]
// CHECK:STDOUT: %pattern_type.loc15_28: type = pattern_type %ptr.loc15_32.1 [symbolic = %pattern_type.loc15_28 (constants.%pattern_type.771b92.3)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete.loc15_23: <witness> = require_complete_type %V.as_type.loc15_25.1 [symbolic = %require_complete.loc15_23 (constants.%require_complete.7cc52f.2)]
// CHECK:STDOUT: %require_complete.loc15_29: <witness> = require_complete_type %ptr.loc15_32.1 [symbolic = %require_complete.loc15_29 (constants.%require_complete.b75e15.2)]
// CHECK:STDOUT: %require_complete.loc15_23: <witness> = require_complete_type %V.binding.as_type [symbolic = %require_complete.loc15_23 (constants.%require_complete.ee4571.2)]
// CHECK:STDOUT: %require_complete.loc15_29: <witness> = require_complete_type %ptr.loc15_32.1 [symbolic = %require_complete.loc15_29 (constants.%require_complete.99d4b7.2)]
// CHECK:STDOUT: %L1.lookup_impl_witness: <witness> = lookup_impl_witness %V.loc15_14.1, @L1 [symbolic = %L1.lookup_impl_witness (constants.%L1.lookup_impl_witness.771a6e.2)]
// CHECK:STDOUT: %.loc16_4: type = fn_type_with_self_type constants.%L1.R1.type, %V.loc15_14.1 [symbolic = %.loc16_4 (constants.%.ce9ba2.2)]
// CHECK:STDOUT: %impl.elem0.loc16_4.2: @Compound4.%.loc16_4 (%.ce9ba2.2) = impl_witness_access %L1.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc16_4.2 (constants.%impl.elem0.8eac48.2)]
@@ -883,9 +883,9 @@ fn Works() {
// CHECK:STDOUT: %impl.elem1.loc17_4.2: @Compound4.%.loc17_4.2 (%.db2f57.2) = impl_witness_access %L1.lookup_impl_witness, element1 [symbolic = %impl.elem1.loc17_4.2 (constants.%impl.elem1.d265e8.2)]
// CHECK:STDOUT: %specific_impl_fn.loc17_4.2: <specific function> = specific_impl_function %impl.elem1.loc17_4.2, @L1.S1(%V.loc15_14.1) [symbolic = %specific_impl_fn.loc17_4.2 (constants.%specific_impl_fn.5bb1dd.2)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%y.param: @Compound4.%V.as_type.loc15_25.1 (%V.as_type), %p.param: @Compound4.%ptr.loc15_32.1 (%ptr.be473c.3)) {
// CHECK:STDOUT: fn(%y.param: @Compound4.%V.binding.as_type (%V.binding.as_type), %p.param: @Compound4.%ptr.loc15_32.1 (%ptr.24e2cb.3)) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %y.ref: @Compound4.%V.as_type.loc15_25.1 (%V.as_type) = name_ref y, %y
// CHECK:STDOUT: %y.ref: @Compound4.%V.binding.as_type (%V.binding.as_type) = name_ref y, %y
// CHECK:STDOUT: %L1.ref.loc16: type = name_ref L1, file.%L1.decl [concrete = constants.%L1.type]
// CHECK:STDOUT: %R1.ref: %L1.assoc_type = name_ref R1, @L1.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %impl.elem0.loc16_4.1: @Compound4.%.loc16_4 (%.ce9ba2.2) = impl_witness_access constants.%L1.lookup_impl_witness.771a6e.2, element0 [symbolic = %impl.elem0.loc16_4.2 (constants.%impl.elem0.8eac48.2)]
@@ -893,15 +893,15 @@ fn Works() {
// CHECK:STDOUT: %specific_impl_fn.loc16_4.1: <specific function> = specific_impl_function %impl.elem0.loc16_4.1, @L1.R1(constants.%V) [symbolic = %specific_impl_fn.loc16_4.2 (constants.%specific_impl_fn.239e4d.2)]
// CHECK:STDOUT: %bound_method.loc16_13: <bound method> = bound_method %y.ref, %specific_impl_fn.loc16_4.1
// CHECK:STDOUT: %.loc16_13: init %empty_tuple.type = call %bound_method.loc16_13(%y.ref)
// CHECK:STDOUT: %p.ref: @Compound4.%ptr.loc15_32.1 (%ptr.be473c.3) = name_ref p, %p
// CHECK:STDOUT: %p.ref: @Compound4.%ptr.loc15_32.1 (%ptr.24e2cb.3) = name_ref p, %p
// CHECK:STDOUT: %L1.ref.loc17: type = name_ref L1, file.%L1.decl [concrete = constants.%L1.type]
// CHECK:STDOUT: %S1.ref: %L1.assoc_type = name_ref S1, @L1.%assoc1 [concrete = constants.%assoc1]
// CHECK:STDOUT: %.loc17_4.1: ref @Compound4.%V.as_type.loc15_25.1 (%V.as_type) = deref %p.ref
// CHECK:STDOUT: %.loc17_4.1: ref @Compound4.%V.binding.as_type (%V.binding.as_type) = deref %p.ref
// CHECK:STDOUT: %impl.elem1.loc17_4.1: @Compound4.%.loc17_4.2 (%.db2f57.2) = impl_witness_access constants.%L1.lookup_impl_witness.771a6e.2, element1 [symbolic = %impl.elem1.loc17_4.2 (constants.%impl.elem1.d265e8.2)]
// CHECK:STDOUT: %bound_method.loc17_4: <bound method> = bound_method %.loc17_4.1, %impl.elem1.loc17_4.1
// CHECK:STDOUT: %specific_impl_fn.loc17_4.1: <specific function> = specific_impl_function %impl.elem1.loc17_4.1, @L1.S1(constants.%V) [symbolic = %specific_impl_fn.loc17_4.2 (constants.%specific_impl_fn.5bb1dd.2)]
// CHECK:STDOUT: %bound_method.loc17_14: <bound method> = bound_method %.loc17_4.1, %specific_impl_fn.loc17_4.1
// CHECK:STDOUT: %addr: @Compound4.%ptr.loc15_32.1 (%ptr.be473c.3) = addr_of %.loc17_4.1
// CHECK:STDOUT: %addr: @Compound4.%ptr.loc15_32.1 (%ptr.24e2cb.3) = addr_of %.loc17_4.1
// CHECK:STDOUT: %.loc17_14: init %empty_tuple.type = call %bound_method.loc17_14(%addr)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
@@ -909,57 +909,57 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L1.R1(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%Self.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b73027.1
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ca8092.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L1.S1(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc5_24.1 => constants.%Self.as_type
// CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.be473c.1
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c147e0.1
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.24e2cb.1
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.771b92.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Simple4(constants.%T) {
// CHECK:STDOUT: %T.loc9_12.1 => constants.%T
// CHECK:STDOUT: %T.as_type.loc9_23.1 => constants.%T.as_type
// CHECK:STDOUT: %pattern_type.loc9_20 => constants.%pattern_type.b73027.2
// CHECK:STDOUT: %ptr.loc9_30.1 => constants.%ptr.be473c.2
// CHECK:STDOUT: %pattern_type.loc9_26 => constants.%pattern_type.c147e0.2
// CHECK:STDOUT: %T.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %pattern_type.loc9_20 => constants.%pattern_type.ca8092.2
// CHECK:STDOUT: %ptr.loc9_30.1 => constants.%ptr.24e2cb.2
// CHECK:STDOUT: %pattern_type.loc9_26 => constants.%pattern_type.771b92.2
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L1.R1(constants.%T) {
// CHECK:STDOUT: %Self => constants.%T
// CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%T.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b73027.2
// CHECK:STDOUT: %Self.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ca8092.2
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L1.S1(constants.%T) {
// CHECK:STDOUT: %Self => constants.%T
// CHECK:STDOUT: %Self.as_type.loc5_24.1 => constants.%T.as_type
// CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.be473c.2
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c147e0.2
// CHECK:STDOUT: %Self.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.24e2cb.2
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.771b92.2
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Compound4(constants.%V) {
// CHECK:STDOUT: %V.loc15_14.1 => constants.%V
// CHECK:STDOUT: %V.as_type.loc15_25.1 => constants.%V.as_type
// CHECK:STDOUT: %pattern_type.loc15_22 => constants.%pattern_type.b73027.3
// CHECK:STDOUT: %ptr.loc15_32.1 => constants.%ptr.be473c.3
// CHECK:STDOUT: %pattern_type.loc15_28 => constants.%pattern_type.c147e0.3
// CHECK:STDOUT: %V.binding.as_type => constants.%V.binding.as_type
// CHECK:STDOUT: %pattern_type.loc15_22 => constants.%pattern_type.ca8092.3
// CHECK:STDOUT: %ptr.loc15_32.1 => constants.%ptr.24e2cb.3
// CHECK:STDOUT: %pattern_type.loc15_28 => constants.%pattern_type.771b92.3
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L1.R1(constants.%V) {
// CHECK:STDOUT: %Self => constants.%V
// CHECK:STDOUT: %Self.as_type.loc4_15.1 => constants.%V.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b73027.3
// CHECK:STDOUT: %Self.binding.as_type => constants.%V.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ca8092.3
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L1.S1(constants.%V) {
// CHECK:STDOUT: %Self => constants.%V
// CHECK:STDOUT: %Self.as_type.loc5_24.1 => constants.%V.as_type
// CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.be473c.3
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c147e0.3
// CHECK:STDOUT: %Self.binding.as_type => constants.%V.binding.as_type
// CHECK:STDOUT: %ptr.loc5_24.1 => constants.%ptr.24e2cb.3
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.771b92.3
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_interface_instance_caller_not.carbon
@@ -967,15 +967,15 @@ fn Works() {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %L2.type: type = facet_type <@L2> [concrete]
// CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type.dcd64e.1: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.188385.1: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %L2.R2.type: type = fn_type @L2.R2 [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %L2.R2: %L2.R2.type = struct_value () [concrete]
// CHECK:STDOUT: %L2.assoc_type: type = assoc_entity_type @L2 [concrete]
// CHECK:STDOUT: %assoc0: %L2.assoc_type = assoc_entity element0, @L2.%L2.R2.decl [concrete]
// CHECK:STDOUT: %ptr.6e05d5.1: type = ptr_type %Self.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.f863f7.1: type = pattern_type %ptr.6e05d5.1 [symbolic]
// CHECK:STDOUT: %ptr.ab04da.1: type = ptr_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.4192b4.1: type = pattern_type %ptr.ab04da.1 [symbolic]
// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type auto [concrete]
// CHECK:STDOUT: %L2.S2.type: type = fn_type @L2.S2 [concrete]
// CHECK:STDOUT: %L2.S2: %L2.S2.type = struct_value () [concrete]
@@ -986,16 +986,16 @@ fn Works() {
// CHECK:STDOUT: %pattern_type.38f: type = pattern_type %L2.type [concrete]
// CHECK:STDOUT: %Simple5.type: type = fn_type @Simple5 [concrete]
// CHECK:STDOUT: %Simple5: %Simple5.type = struct_value () [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %L2.lookup_impl_witness: <witness> = lookup_impl_witness %T, @L2 [symbolic]
// CHECK:STDOUT: %.c57: type = fn_type_with_self_type %L2.R2.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem0: %.c57 = impl_witness_access %L2.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %pattern_type.dcd64e.2: type = pattern_type %T.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.188385.2: type = pattern_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %specific_impl_fn.259: <specific function> = specific_impl_function %impl.elem0, @L2.R2(%T) [symbolic]
// CHECK:STDOUT: %.7f1: type = fn_type_with_self_type %L2.S2.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem1: %.7f1 = impl_witness_access %L2.lookup_impl_witness, element1 [symbolic]
// CHECK:STDOUT: %ptr.6e05d5.2: type = ptr_type %T.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.f863f7.2: type = pattern_type %ptr.6e05d5.2 [symbolic]
// CHECK:STDOUT: %ptr.ab04da.2: type = ptr_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.4192b4.2: type = pattern_type %ptr.ab04da.2 [symbolic]
// CHECK:STDOUT: %specific_impl_fn.555: <specific function> = specific_impl_function %impl.elem1, @L2.S2(%T) [symbolic]
// CHECK:STDOUT: %V: %L2.type = bind_symbolic_name V, 0 [symbolic]
// CHECK:STDOUT: %Compound5.type: type = fn_type @Compound5 [concrete]
@@ -1041,31 +1041,31 @@ fn Works() {
// CHECK:STDOUT: interface @L2 {
// CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %L2.R2.decl: %L2.R2.type = fn_decl @L2.R2 [concrete = constants.%L2.R2] {
// CHECK:STDOUT: %self.patt: @L2.R2.%pattern_type (%pattern_type.dcd64e.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L2.R2.%pattern_type (%pattern_type.dcd64e.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @L2.R2.%pattern_type (%pattern_type.188385.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L2.R2.%pattern_type (%pattern_type.188385.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @L2.R2.%Self.as_type.loc5_15.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.2 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @L2.R2.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc5_15.1: type = splice_block %.loc5_15.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %L2.type = name_ref Self, @L2.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc5_15.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc5_15.2: type = converted %Self.ref, %Self.as_type.loc5_15.2 [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc5_15.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @L2.R2.%Self.as_type.loc5_15.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @L2.R2.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %L2.assoc_type = assoc_entity element0, %L2.R2.decl [concrete = constants.%assoc0]
// CHECK:STDOUT: %L2.S2.decl: %L2.S2.type = fn_decl @L2.S2 [concrete = constants.%L2.S2] {
// CHECK:STDOUT: %self.patt: @L2.S2.%pattern_type (%pattern_type.f863f7.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L2.S2.%pattern_type (%pattern_type.f863f7.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @L2.S2.%pattern_type (%pattern_type.4192b4.1) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @L2.S2.%pattern_type (%pattern_type.4192b4.1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %.loc6_9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @L2.S2.%ptr.loc6_24.1 (%ptr.6e05d5.1) = value_param call_param0
// CHECK:STDOUT: %.loc6_24.1: type = splice_block %ptr.loc6_24.2 [symbolic = %ptr.loc6_24.1 (constants.%ptr.6e05d5.1)] {
// CHECK:STDOUT: %self.param: @L2.S2.%ptr.loc6_24.1 (%ptr.ab04da.1) = value_param call_param0
// CHECK:STDOUT: %.loc6_24.1: type = splice_block %ptr.loc6_24.2 [symbolic = %ptr.loc6_24.1 (constants.%ptr.ab04da.1)] {
// CHECK:STDOUT: %Self.ref: %L2.type = name_ref Self, @L2.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc6_24.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc6_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc6_24.2: type = converted %Self.ref, %Self.as_type.loc6_24.2 [symbolic = %Self.as_type.loc6_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %ptr.loc6_24.2: type = ptr_type %.loc6_24.2 [symbolic = %ptr.loc6_24.1 (constants.%ptr.6e05d5.1)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc6_24.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %ptr.loc6_24.2: type = ptr_type %.loc6_24.2 [symbolic = %ptr.loc6_24.1 (constants.%ptr.ab04da.1)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @L2.S2.%ptr.loc6_24.1 (%ptr.6e05d5.1) = bind_name self, %self.param
// CHECK:STDOUT: %self: @L2.S2.%ptr.loc6_24.1 (%ptr.ab04da.1) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc1: %L2.assoc_type = assoc_entity element1, %L2.S2.decl [concrete = constants.%assoc1]
// CHECK:STDOUT:
@@ -1078,26 +1078,26 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @L2.R2(@L2.%Self: %L2.type) {
// CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc5_15.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_15.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_15.1 [symbolic = %pattern_type (constants.%pattern_type.dcd64e.1)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.188385.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @L2.R2.%Self.as_type.loc5_15.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @L2.R2.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @L2.S2(@L2.%Self: %L2.type) {
// CHECK:STDOUT: %Self: %L2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc6_24.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %ptr.loc6_24.1: type = ptr_type %Self.as_type.loc6_24.1 [symbolic = %ptr.loc6_24.1 (constants.%ptr.6e05d5.1)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc6_24.1 [symbolic = %pattern_type (constants.%pattern_type.f863f7.1)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %ptr.loc6_24.1: type = ptr_type %Self.binding.as_type [symbolic = %ptr.loc6_24.1 (constants.%ptr.ab04da.1)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc6_24.1 [symbolic = %pattern_type (constants.%pattern_type.4192b4.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @L2.S2.%ptr.loc6_24.1 (%ptr.6e05d5.1));
// CHECK:STDOUT: fn(%self.param: @L2.S2.%ptr.loc6_24.1 (%ptr.ab04da.1));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Simple5(%T.loc10_12.2: %L2.type) {
// CHECK:STDOUT: %T.loc10_12.1: %L2.type = bind_symbolic_name T, 0 [symbolic = %T.loc10_12.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc18_4.2: type = facet_access_type %T.loc10_12.1 [symbolic = %T.as_type.loc18_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc10_12.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %L2.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc10_12.1, @L2 [symbolic = %L2.lookup_impl_witness (constants.%L2.lookup_impl_witness)]
// CHECK:STDOUT: %.loc18_4.2: type = fn_type_with_self_type constants.%L2.R2.type, %T.loc10_12.1 [symbolic = %.loc18_4.2 (constants.%.c57)]
// CHECK:STDOUT: %impl.elem0.loc18_4.2: @Simple5.%.loc18_4.2 (%.c57) = impl_witness_access %L2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc18_4.2 (constants.%impl.elem0)]
@@ -1110,15 +1110,15 @@ fn Works() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %T.ref.loc18: %L2.type = name_ref T, %T.loc10_12.2 [symbolic = %T.loc10_12.1 (constants.%T)]
// CHECK:STDOUT: %R2.ref: %L2.assoc_type = name_ref R2, @L2.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %T.as_type.loc18_4.1: type = facet_access_type %T.ref.loc18 [symbolic = %T.as_type.loc18_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc18_4.1: type = converted %T.ref.loc18, %T.as_type.loc18_4.1 [symbolic = %T.as_type.loc18_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type.loc18: type = facet_access_type %T.ref.loc18 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc18_4.1: type = converted %T.ref.loc18, %T.as_type.loc18 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %impl.elem0.loc18_4.1: @Simple5.%.loc18_4.2 (%.c57) = impl_witness_access constants.%L2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc18_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc18_4.1: <specific function> = specific_impl_function %impl.elem0.loc18_4.1, @L2.R2(constants.%T) [symbolic = %specific_impl_fn.loc18_4.2 (constants.%specific_impl_fn.259)]
// CHECK:STDOUT: %.loc18_8: init %empty_tuple.type = call %specific_impl_fn.loc18_4.1(<error>) [concrete = <error>]
// CHECK:STDOUT: %T.ref.loc26: %L2.type = name_ref T, %T.loc10_12.2 [symbolic = %T.loc10_12.1 (constants.%T)]
// CHECK:STDOUT: %S2.ref: %L2.assoc_type = name_ref S2, @L2.%assoc1 [concrete = constants.%assoc1]
// CHECK:STDOUT: %T.as_type.loc26: type = facet_access_type %T.ref.loc26 [symbolic = %T.as_type.loc18_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc26_4.1: type = converted %T.ref.loc26, %T.as_type.loc26 [symbolic = %T.as_type.loc18_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type.loc26: type = facet_access_type %T.ref.loc26 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc26_4.1: type = converted %T.ref.loc26, %T.as_type.loc26 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %impl.elem1.loc26_4.1: @Simple5.%.loc26_4.2 (%.7f1) = impl_witness_access constants.%L2.lookup_impl_witness, element1 [symbolic = %impl.elem1.loc26_4.2 (constants.%impl.elem1)]
// CHECK:STDOUT: %specific_impl_fn.loc26_4.1: <specific function> = specific_impl_function %impl.elem1.loc26_4.1, @L2.S2(constants.%T) [symbolic = %specific_impl_fn.loc26_4.2 (constants.%specific_impl_fn.555)]
// CHECK:STDOUT: %addr: <error> = addr_of <error> [concrete = <error>]
@@ -1146,15 +1146,15 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L2.R2(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%Self.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dcd64e.1
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.188385.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L2.S2(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc6_24.1 => constants.%Self.as_type
// CHECK:STDOUT: %ptr.loc6_24.1 => constants.%ptr.6e05d5.1
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f863f7.1
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %ptr.loc6_24.1 => constants.%ptr.ab04da.1
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4192b4.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Simple5(constants.%T) {
@@ -1163,15 +1163,15 @@ fn Works() {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L2.R2(constants.%T) {
// CHECK:STDOUT: %Self => constants.%T
// CHECK:STDOUT: %Self.as_type.loc5_15.1 => constants.%T.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.dcd64e.2
// CHECK:STDOUT: %Self.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.188385.2
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @L2.S2(constants.%T) {
// CHECK:STDOUT: %Self => constants.%T
// CHECK:STDOUT: %Self.as_type.loc6_24.1 => constants.%T.as_type
// CHECK:STDOUT: %ptr.loc6_24.1 => constants.%ptr.6e05d5.2
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f863f7.2
// CHECK:STDOUT: %Self.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %ptr.loc6_24.1 => constants.%ptr.ab04da.2
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4192b4.2
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Compound5(constants.%V) {
@@ -1213,10 +1213,10 @@ fn Works() {
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
// CHECK:STDOUT: %type_where: type = facet_type <type where .Self impls <CanDestroy>> [concrete]
// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.b80: %DestroyT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.ed8: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.f93: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.ed8 = struct_value () [concrete]
// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.b80, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.f93, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value) [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -1352,25 +1352,25 @@ fn Works() {
// CHECK:STDOUT: %.loc38_32: %A.type = converted %.loc38_8, <error> [concrete = <error>]
// CHECK:STDOUT: %facet_value.loc38: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value]
// CHECK:STDOUT: %.loc38_6.5: %type_where = converted constants.%C, %facet_value.loc38 [concrete = constants.%facet_value]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound.loc38: <bound method> = bound_method %.loc38_6.4, constants.%DestroyT.as_type.as.Destroy.impl.Op.b80
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.b80, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc38_6: <bound method> = bound_method %.loc38_6.4, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc38: <bound method> = bound_method %.loc38_6.4, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc38_6: <bound method> = bound_method %.loc38_6.4, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %addr.loc38: %ptr.019 = addr_of %.loc38_6.4
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc38: init %empty_tuple.type = call %bound_method.loc38_6(%addr.loc38)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc38: init %empty_tuple.type = call %bound_method.loc38_6(%addr.loc38)
// CHECK:STDOUT: %facet_value.loc30: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value]
// CHECK:STDOUT: %.loc30_6.5: %type_where = converted constants.%C, %facet_value.loc30 [concrete = constants.%facet_value]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound.loc30: <bound method> = bound_method %.loc30_6.4, constants.%DestroyT.as_type.as.Destroy.impl.Op.b80
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.b80, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc30_6: <bound method> = bound_method %.loc30_6.4, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc30: <bound method> = bound_method %.loc30_6.4, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.2: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc30_6: <bound method> = bound_method %.loc30_6.4, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.2
// CHECK:STDOUT: %addr.loc30: %ptr.019 = addr_of %.loc30_6.4
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30_6(%addr.loc30)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc30: init %empty_tuple.type = call %bound_method.loc30_6(%addr.loc30)
// CHECK:STDOUT: %facet_value.loc22: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value]
// CHECK:STDOUT: %.loc22_5.5: %type_where = converted constants.%C, %facet_value.loc22 [concrete = constants.%facet_value]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound.loc22: <bound method> = bound_method %.loc22_5.4, constants.%DestroyT.as_type.as.Destroy.impl.Op.b80
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.3: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.b80, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc22_5: <bound method> = bound_method %.loc22_5.4, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.3
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc22: <bound method> = bound_method %.loc22_5.4, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.3: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc22_5: <bound method> = bound_method %.loc22_5.4, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.3
// CHECK:STDOUT: %addr.loc22: %ptr.019 = addr_of %.loc22_5.4
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22_5(%addr.loc22)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22_5(%addr.loc22)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
+24 -24
View File
@@ -33,8 +33,8 @@ class C {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self.d21: %I.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type.800: type = facet_access_type %Self.d21 [symbolic]
// CHECK:STDOUT: %pattern_type.679: type = pattern_type %Self.as_type.800 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.4ee: type = symbolic_binding_type Self, 0, %Self.d21 [symbolic]
// CHECK:STDOUT: %pattern_type.1ec: type = pattern_type %Self.binding.as_type.4ee [symbolic]
// CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete]
@@ -47,16 +47,16 @@ class C {
// CHECK:STDOUT: %I.facet: %I.type = facet_value %C, (%I.impl_witness) [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %require_complete.3c3: <witness> = require_complete_type %Self.as_type.800 [symbolic]
// CHECK:STDOUT: %require_complete.5a0: <witness> = require_complete_type %Self.binding.as_type.4ee [symbolic]
// CHECK:STDOUT: %C.val: %C = struct_value () [concrete]
// CHECK:STDOUT: %.fa9: type = fn_type_with_self_type %I.F.type, %I.facet [concrete]
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
// CHECK:STDOUT: %type_where: type = facet_type <type where .Self impls <CanDestroy>> [concrete]
// CHECK:STDOUT: %facet_value: %type_where = facet_value %C, () [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.075: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.b80: %DestroyT.as_type.as.Destroy.impl.Op.type.075 = struct_value () [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.ed8: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.f93: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.ed8 = struct_value () [concrete]
// CHECK:STDOUT: %ptr.019: type = ptr_type %C [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.b80, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.f93, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value) [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -80,16 +80,16 @@ class C {
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.d21]
// CHECK:STDOUT: %I.F.decl: %I.F.type = fn_decl @I.F [concrete = constants.%I.F] {
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.679) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.679) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.1ec) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.1ec) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc18_16.1 (%Self.as_type.800) = value_param call_param0
// CHECK:STDOUT: %.loc18_16.1: type = splice_block %.loc18_16.2 [symbolic = %Self.as_type.loc18_16.1 (constants.%Self.as_type.800)] {
// CHECK:STDOUT: %self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type.4ee) = value_param call_param0
// CHECK:STDOUT: %.loc18_16.1: type = splice_block %.loc18_16.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.4ee)] {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.d21)]
// CHECK:STDOUT: %Self.as_type.loc18_16.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc18_16.1 (constants.%Self.as_type.800)]
// CHECK:STDOUT: %.loc18_16.2: type = converted %Self.ref, %Self.as_type.loc18_16.2 [symbolic = %Self.as_type.loc18_16.1 (constants.%Self.as_type.800)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.4ee)]
// CHECK:STDOUT: %.loc18_16.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.4ee)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc18_16.1 (%Self.as_type.800) = bind_name self, %self.param
// CHECK:STDOUT: %self: @I.F.%Self.binding.as_type (%Self.binding.as_type.4ee) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0.a33]
// CHECK:STDOUT:
@@ -135,13 +135,13 @@ class C {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.d21)]
// CHECK:STDOUT: %Self.as_type.loc18_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc18_16.1 (constants.%Self.as_type.800)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc18_16.1 [symbolic = %pattern_type (constants.%pattern_type.679)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.4ee)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.1ec)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.as_type.loc18_16.1 [symbolic = %require_complete (constants.%require_complete.3c3)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.binding.as_type [symbolic = %require_complete (constants.%require_complete.5a0)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc18_16.1 (%Self.as_type.800)) {
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type.4ee)) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.c48 = binding_pattern c [concrete]
@@ -163,11 +163,11 @@ class C {
// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %bound_method.loc21(%.loc21)
// CHECK:STDOUT: %facet_value: %type_where = facet_value constants.%C, () [concrete = constants.%facet_value]
// CHECK:STDOUT: %.loc20_7.2: %type_where = converted constants.%C, %facet_value [concrete = constants.%facet_value]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound: <bound method> = bound_method %c.var, constants.%DestroyT.as_type.as.Destroy.impl.Op.b80
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.b80, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc20: <bound method> = bound_method %c.var, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound: <bound method> = bound_method %c.var, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.f93, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc20: <bound method> = bound_method %c.var, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn
// CHECK:STDOUT: %addr: %ptr.019 = addr_of %c.var
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc20(%addr)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc20(%addr)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
@@ -179,13 +179,13 @@ class C {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self.d21) {
// CHECK:STDOUT: %Self => constants.%Self.d21
// CHECK:STDOUT: %Self.as_type.loc18_16.1 => constants.%Self.as_type.800
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.679
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.4ee
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.1ec
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%I.facet) {
// CHECK:STDOUT: %Self => constants.%I.facet
// CHECK:STDOUT: %Self.as_type.loc18_16.1 => constants.%C
// CHECK:STDOUT: %Self.binding.as_type => constants.%C
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c48
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -97,8 +97,8 @@ interface C {
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.96f = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.3ac: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
// CHECK:STDOUT: %Self: %ImplicitAs.type.3ac = bind_symbolic_name Self, 1 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type.379: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.f6d: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.7dc: type = pattern_type %Dest [symbolic]
// CHECK:STDOUT: %ImplicitAs.Convert.type: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%Dest) [symbolic]
// CHECK:STDOUT: %ImplicitAs.Convert: %ImplicitAs.Convert.type = struct_value () [symbolic]
@@ -132,20 +132,20 @@ interface C {
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.3ac) = bind_symbolic_name Self, 1 [symbolic = %Self.2 (constants.%Self)]
// CHECK:STDOUT: %ImplicitAs.Convert.decl: @ImplicitAs.%ImplicitAs.Convert.type (%ImplicitAs.Convert.type) = fn_decl @ImplicitAs.Convert [symbolic = @ImplicitAs.%ImplicitAs.Convert (constants.%ImplicitAs.Convert)] {
// CHECK:STDOUT: %self.patt: @ImplicitAs.Convert.%pattern_type.loc4_14 (%pattern_type.379) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @ImplicitAs.Convert.%pattern_type.loc4_14 (%pattern_type.379) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @ImplicitAs.Convert.%pattern_type.loc4_14 (%pattern_type.f6d) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @ImplicitAs.Convert.%pattern_type.loc4_14 (%pattern_type.f6d) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: @ImplicitAs.Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @ImplicitAs.Convert.%pattern_type.loc4_28 (%pattern_type.7dc) = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Dest.ref: type = name_ref Dest, @ImplicitAs.%Dest.loc3_22.2 [symbolic = %Dest (constants.%Dest)]
// CHECK:STDOUT: %self.param: @ImplicitAs.Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.3 [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @ImplicitAs.Convert.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc4_20.1: type = splice_block %.loc4_20.3 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %.loc4_20.2: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.3ac) = specific_constant @ImplicitAs.%Self.1, @ImplicitAs(constants.%Dest) [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.ref: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.3ac) = name_ref Self, %.loc4_20.2 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc4_20.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc4_20.3: type = converted %Self.ref, %Self.as_type.loc4_20.2 [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc4_20.3: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @ImplicitAs.Convert.%Self.as_type.loc4_20.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @ImplicitAs.Convert.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: ref @ImplicitAs.Convert.%Dest (%Dest) = out_param call_param1
// CHECK:STDOUT: %return: ref @ImplicitAs.Convert.%Dest (%Dest) = return_slot %return.param
// CHECK:STDOUT: }
@@ -163,11 +163,11 @@ interface C {
// CHECK:STDOUT: %Dest: type = bind_symbolic_name Dest, 0 [symbolic = %Dest (constants.%Dest)]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.3ac)]
// CHECK:STDOUT: %Self: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.3ac) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc4_20.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc4_20.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.as_type.loc4_20.1 [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.379)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.f6d)]
// CHECK:STDOUT: %pattern_type.loc4_28: type = pattern_type %Dest [symbolic = %pattern_type.loc4_28 (constants.%pattern_type.7dc)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @ImplicitAs.Convert.%Self.as_type.loc4_20.1 (%Self.as_type)) -> @ImplicitAs.Convert.%Dest (%Dest);
// CHECK:STDOUT: fn(%self.param: @ImplicitAs.Convert.%Self.binding.as_type (%Self.binding.as_type)) -> @ImplicitAs.Convert.%Dest (%Dest);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @ImplicitAs(constants.%Dest) {
@@ -178,8 +178,8 @@ interface C {
// CHECK:STDOUT: %Dest => constants.%Dest
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.3ac
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc4_20.1 => constants.%Self.as_type
// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.379
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.f6d
// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.7dc
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -192,7 +192,7 @@ interface C {
// CHECK:STDOUT: %assoc0.cd1: %I.assoc_type = assoc_entity element0, @I.%T [concrete]
// CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete]
// CHECK:STDOUT: %Self.bf6: %J.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.bf6 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.bf6 [symbolic]
// CHECK:STDOUT: %J.F.type: type = fn_type @J.F [concrete]
// CHECK:STDOUT: %J.F: %J.F.type = struct_value () [concrete]
// CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete]
@@ -237,7 +237,7 @@ interface C {
// CHECK:STDOUT: %return.patt: <error> = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: <error> = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.as_type.loc15_13.2: type = facet_access_type @J.%Self [symbolic = %Self.as_type.loc15_13.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %as_type: type = facet_access_type @J.%Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %U.ref: <error> = name_ref U, <error> [concrete = <error>]
// CHECK:STDOUT: %return.param: ref <error> = out_param call_param0
// CHECK:STDOUT: %return: ref <error> = return_slot %return.param
@@ -258,7 +258,7 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @J.F(@J.%Self: %J.type) {
// CHECK:STDOUT: %Self: %J.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.bf6)]
// CHECK:STDOUT: %Self.as_type.loc15_13.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc15_13.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> <error>;
// CHECK:STDOUT: }
@@ -267,7 +267,7 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @J.F(constants.%Self.bf6) {
// CHECK:STDOUT: %Self => constants.%Self.bf6
// CHECK:STDOUT: %Self.as_type.loc15_13.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- alias_to_different_interface_with_requires.carbon
@@ -282,19 +282,19 @@ interface C {
// CHECK:STDOUT: %.Self.659: %type = bind_symbolic_name .Self [symbolic_self]
// CHECK:STDOUT: %V: %J2.type = bind_symbolic_name V, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.dfd: type = pattern_type %J2.type [concrete]
// CHECK:STDOUT: %V.as_type: type = facet_access_type %V [symbolic]
// CHECK:STDOUT: %V.binding.as_type: type = symbolic_binding_type V, 0, %V [symbolic]
// CHECK:STDOUT: %.Self.f90: %I2.type = bind_symbolic_name .Self [symbolic_self]
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.f90 [symbolic_self]
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.f90 [symbolic_self]
// CHECK:STDOUT: %I2.lookup_impl_witness.b49: <witness> = lookup_impl_witness %.Self.f90, @I2 [symbolic_self]
// CHECK:STDOUT: %impl.elem0.b22: type = impl_witness_access %I2.lookup_impl_witness.b49, element0 [symbolic_self]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %I2_where.type: type = facet_type <@I2 where %impl.elem0.b22 = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %I2.impl_witness.f44a82.1: <witness> = impl_witness file.%I2.impl_witness_table, @V.as_type.as.I2.impl(%V) [symbolic]
// CHECK:STDOUT: %I2.impl_witness.450066.1: <witness> = impl_witness file.%I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%V) [symbolic]
// CHECK:STDOUT: %Self.a70: %J2.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.a70 [symbolic]
// CHECK:STDOUT: %I2.impl_witness.f44a82.2: <witness> = impl_witness file.%I2.impl_witness_table, @V.as_type.as.I2.impl(%Self.a70) [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.a70 [symbolic]
// CHECK:STDOUT: %I2.impl_witness.450066.2: <witness> = impl_witness file.%I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%Self.a70) [symbolic]
// CHECK:STDOUT: %I2.lookup_impl_witness.cb8: <witness> = lookup_impl_witness %Self.a70, @I2 [symbolic]
// CHECK:STDOUT: %I2.facet: %I2.type = facet_value %Self.as_type, (%I2.lookup_impl_witness.cb8) [symbolic]
// CHECK:STDOUT: %I2.facet: %I2.type = facet_value %Self.binding.as_type, (%I2.lookup_impl_witness.cb8) [symbolic]
// CHECK:STDOUT: %impl.elem0.dc2: type = impl_witness_access %I2.lookup_impl_witness.cb8, element0 [symbolic]
// CHECK:STDOUT: %pattern_type.cad: type = pattern_type %impl.elem0.dc2 [symbolic]
// CHECK:STDOUT: %J2.F2.type: type = fn_type @J2.F2 [concrete]
@@ -318,18 +318,18 @@ interface C {
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %I2.decl: type = interface_decl @I2 [concrete = constants.%I2.type] {} {}
// CHECK:STDOUT: %J2.decl.loc9: type = interface_decl @J2 [concrete = constants.%J2.type] {} {}
// CHECK:STDOUT: impl_decl @V.as_type.as.I2.impl [concrete] {
// CHECK:STDOUT: impl_decl @V.binding.as_type.as.I2.impl [concrete] {
// CHECK:STDOUT: %V.patt: %pattern_type.dfd = symbolic_binding_pattern V, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %V.ref: %J2.type = name_ref V, %V.loc11_14.1 [symbolic = %V.loc11_14.2 (constants.%V)]
// CHECK:STDOUT: %V.as_type.loc11_22.1: type = facet_access_type %V.ref [symbolic = %V.as_type.loc11_22.2 (constants.%V.as_type)]
// CHECK:STDOUT: %.loc11_22: type = converted %V.ref, %V.as_type.loc11_22.1 [symbolic = %V.as_type.loc11_22.2 (constants.%V.as_type)]
// CHECK:STDOUT: %V.as_type: type = facet_access_type %V.ref [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %.loc11_22: type = converted %V.ref, %V.as_type [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %I2.ref: type = name_ref I2, file.%I2.decl [concrete = constants.%I2.type]
// CHECK:STDOUT: %.Self.1: %I2.type = bind_symbolic_name .Self [symbolic_self = constants.%.Self.f90]
// CHECK:STDOUT: %.Self.ref: %I2.type = name_ref .Self, %.Self.1 [symbolic_self = constants.%.Self.f90]
// CHECK:STDOUT: %T2.ref: %I2.assoc_type = name_ref T2, @T2.%assoc0 [concrete = constants.%assoc0.25f]
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.as_type]
// CHECK:STDOUT: %.loc11_36: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.as_type]
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
// CHECK:STDOUT: %.loc11_36: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access constants.%I2.lookup_impl_witness.b49, element0 [symbolic_self = constants.%impl.elem0.b22]
// CHECK:STDOUT: %.loc11_43.1: %empty_tuple.type = tuple_literal ()
// CHECK:STDOUT: %.loc11_43.2: type = converted %.loc11_43.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
@@ -343,8 +343,8 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT: %V.loc11_14.1: %J2.type = bind_symbolic_name V, 0 [symbolic = %V.loc11_14.2 (constants.%V)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %I2.impl_witness_table = impl_witness_table (%impl_witness_assoc_constant), @V.as_type.as.I2.impl [concrete]
// CHECK:STDOUT: %I2.impl_witness: <witness> = impl_witness %I2.impl_witness_table, @V.as_type.as.I2.impl(constants.%V) [symbolic = @V.as_type.as.I2.impl.%I2.impl_witness (constants.%I2.impl_witness.f44a82.1)]
// CHECK:STDOUT: %I2.impl_witness_table = impl_witness_table (%impl_witness_assoc_constant), @V.binding.as_type.as.I2.impl [concrete]
// CHECK:STDOUT: %I2.impl_witness: <witness> = impl_witness %I2.impl_witness_table, @V.binding.as_type.as.I2.impl(constants.%V) [symbolic = @V.binding.as_type.as.I2.impl.%I2.impl_witness (constants.%I2.impl_witness.450066.1)]
// CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %J2.decl.loc13: type = interface_decl @J2 [concrete = constants.%J2.type] {} {}
// CHECK:STDOUT: }
@@ -370,8 +370,8 @@ interface C {
// CHECK:STDOUT: %return.patt: @J2.F2.%pattern_type (%pattern_type.cad) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @J2.F2.%pattern_type (%pattern_type.cad) = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.as_type.loc15_14.2: type = facet_access_type @J2.%Self [symbolic = %Self.as_type.loc15_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %I2.facet.loc15_14.2: %I2.type = facet_value %Self.as_type.loc15_14.2, (constants.%I2.lookup_impl_witness.cb8) [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet)]
// CHECK:STDOUT: %as_type: type = facet_access_type @J2.%Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %I2.facet.loc15_14.2: %I2.type = facet_value %as_type, (constants.%I2.lookup_impl_witness.cb8) [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet)]
// CHECK:STDOUT: %.loc15: %I2.type = converted @J2.%Self, %I2.facet.loc15_14.2 [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet)]
// CHECK:STDOUT: %impl.elem0.loc15_14.2: type = impl_witness_access constants.%I2.lookup_impl_witness.cb8, element0 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.dc2)]
// CHECK:STDOUT: %U2.ref: type = name_ref U2, %impl.elem0.loc15_14.2 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.dc2)]
@@ -392,10 +392,10 @@ interface C {
// CHECK:STDOUT: assoc_const T2:! type;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic impl @V.as_type.as.I2.impl(%V.loc11_14.1: %J2.type) {
// CHECK:STDOUT: generic impl @V.binding.as_type.as.I2.impl(%V.loc11_14.1: %J2.type) {
// CHECK:STDOUT: %V.loc11_14.2: %J2.type = bind_symbolic_name V, 0 [symbolic = %V.loc11_14.2 (constants.%V)]
// CHECK:STDOUT: %V.as_type.loc11_22.2: type = facet_access_type %V.loc11_14.2 [symbolic = %V.as_type.loc11_22.2 (constants.%V.as_type)]
// CHECK:STDOUT: %I2.impl_witness: <witness> = impl_witness file.%I2.impl_witness_table, @V.as_type.as.I2.impl(%V.loc11_14.2) [symbolic = %I2.impl_witness (constants.%I2.impl_witness.f44a82.1)]
// CHECK:STDOUT: %V.binding.as_type: type = symbolic_binding_type V, 0, %V.loc11_14.2 [symbolic = %V.binding.as_type (constants.%V.binding.as_type)]
// CHECK:STDOUT: %I2.impl_witness: <witness> = impl_witness file.%I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%V.loc11_14.2) [symbolic = %I2.impl_witness (constants.%I2.impl_witness.450066.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -407,9 +407,9 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @J2.F2(@J2.%Self: %J2.type) {
// CHECK:STDOUT: %Self: %J2.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.a70)]
// CHECK:STDOUT: %Self.as_type.loc15_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc15_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %I2.lookup_impl_witness: <witness> = lookup_impl_witness %Self, @I2 [symbolic = %I2.lookup_impl_witness (constants.%I2.lookup_impl_witness.cb8)]
// CHECK:STDOUT: %I2.facet.loc15_14.1: %I2.type = facet_value %Self.as_type.loc15_14.1, (%I2.lookup_impl_witness) [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet)]
// CHECK:STDOUT: %I2.facet.loc15_14.1: %I2.type = facet_value %Self.binding.as_type, (%I2.lookup_impl_witness) [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet)]
// CHECK:STDOUT: %impl.elem0.loc15_14.1: type = impl_witness_access %I2.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.dc2)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc15_14.1 [symbolic = %pattern_type (constants.%pattern_type.cad)]
// CHECK:STDOUT:
@@ -420,16 +420,16 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T2(constants.%.Self.f90) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @V.as_type.as.I2.impl(constants.%V) {
// CHECK:STDOUT: specific @V.binding.as_type.as.I2.impl(constants.%V) {
// CHECK:STDOUT: %V.loc11_14.2 => constants.%V
// CHECK:STDOUT: %V.as_type.loc11_22.2 => constants.%V.as_type
// CHECK:STDOUT: %I2.impl_witness => constants.%I2.impl_witness.f44a82.1
// CHECK:STDOUT: %V.binding.as_type => constants.%V.binding.as_type
// CHECK:STDOUT: %I2.impl_witness => constants.%I2.impl_witness.450066.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @V.as_type.as.I2.impl(constants.%Self.a70) {
// CHECK:STDOUT: specific @V.binding.as_type.as.I2.impl(constants.%Self.a70) {
// CHECK:STDOUT: %V.loc11_14.2 => constants.%Self.a70
// CHECK:STDOUT: %V.as_type.loc11_22.2 => constants.%Self.as_type
// CHECK:STDOUT: %I2.impl_witness => constants.%I2.impl_witness.f44a82.2
// CHECK:STDOUT: %V.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %I2.impl_witness => constants.%I2.impl_witness.450066.2
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: }
@@ -438,7 +438,7 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @J2.F2(constants.%Self.a70) {
// CHECK:STDOUT: %Self => constants.%Self.a70
// CHECK:STDOUT: %Self.as_type.loc15_14.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %I2.lookup_impl_witness => constants.%I2.lookup_impl_witness.cb8
// CHECK:STDOUT: %I2.facet.loc15_14.1 => constants.%I2.facet
// CHECK:STDOUT: %impl.elem0.loc15_14.1 => constants.%impl.elem0.dc2
@@ -450,8 +450,8 @@ interface C {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %A.type: type = facet_type <@A> [concrete]
// CHECK:STDOUT: %Self.0dd: %A.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type.bb6: type = facet_access_type %Self.0dd [symbolic]
// CHECK:STDOUT: %pattern_type.f23: type = pattern_type %Self.as_type.bb6 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.d40: type = symbolic_binding_type Self, 0, %Self.0dd [symbolic]
// CHECK:STDOUT: %pattern_type.c8b: type = pattern_type %Self.binding.as_type.d40 [symbolic]
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %A.F.type: type = fn_type @A.F [concrete]
// CHECK:STDOUT: %A.F: %A.F.type = struct_value () [concrete]
@@ -459,7 +459,7 @@ interface C {
// CHECK:STDOUT: %assoc0.2e6: %A.assoc_type = assoc_entity element0, @A.%A.F.decl [concrete]
// CHECK:STDOUT: %B.type: type = facet_type <@B> [concrete]
// CHECK:STDOUT: %Self.975: %B.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type.da9: type = facet_access_type %Self.975 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.88a: type = symbolic_binding_type Self, 0, %Self.975 [symbolic]
// CHECK:STDOUT: %B.G.type: type = fn_type @B.G [concrete]
// CHECK:STDOUT: %B.G: %B.G.type = struct_value () [concrete]
// CHECK:STDOUT: %B.assoc_type: type = assoc_entity_type @B [concrete]
@@ -486,18 +486,18 @@ interface C {
// CHECK:STDOUT: interface @A {
// CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self.0dd]
// CHECK:STDOUT: %A.F.decl: %A.F.type = fn_decl @A.F [concrete = constants.%A.F] {
// CHECK:STDOUT: %self.patt: @A.F.%pattern_type (%pattern_type.f23) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @A.F.%pattern_type (%pattern_type.f23) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @A.F.%pattern_type (%pattern_type.c8b) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @A.F.%pattern_type (%pattern_type.c8b) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: %pattern_type.98f = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.98f = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @A.F.%Self.as_type.loc6_14.1 (%Self.as_type.bb6) = value_param call_param0
// CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.2 [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type.bb6)] {
// CHECK:STDOUT: %self.param: @A.F.%Self.binding.as_type (%Self.binding.as_type.d40) = value_param call_param0
// CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.d40)] {
// CHECK:STDOUT: %Self.ref: %A.type = name_ref Self, @A.%Self [symbolic = %Self (constants.%Self.0dd)]
// CHECK:STDOUT: %Self.as_type.loc6_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type.bb6)]
// CHECK:STDOUT: %.loc6_14.2: type = converted %Self.ref, %Self.as_type.loc6_14.2 [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type.bb6)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.d40)]
// CHECK:STDOUT: %.loc6_14.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.d40)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @A.F.%Self.as_type.loc6_14.1 (%Self.as_type.bb6) = bind_name self, %self.param
// CHECK:STDOUT: %self: @A.F.%Self.binding.as_type (%Self.binding.as_type.d40) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: ref type = out_param call_param1
// CHECK:STDOUT: %return: ref type = return_slot %return.param
// CHECK:STDOUT: }
@@ -518,7 +518,7 @@ interface C {
// CHECK:STDOUT: %return.patt: <error> = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: <error> = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.as_type.loc14_13.2: type = facet_access_type @B.%Self [symbolic = %Self.as_type.loc14_13.1 (constants.%Self.as_type.da9)]
// CHECK:STDOUT: %as_type: type = facet_access_type @B.%Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.88a)]
// CHECK:STDOUT: %F.ref: <error> = name_ref F, <error> [concrete = <error>]
// CHECK:STDOUT: %return.param: ref <error> = out_param call_param0
// CHECK:STDOUT: %return: ref <error> = return_slot %return.param
@@ -535,28 +535,28 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @A.F(@A.%Self: %A.type) {
// CHECK:STDOUT: %Self: %A.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.0dd)]
// CHECK:STDOUT: %Self.as_type.loc6_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type.bb6)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc6_14.1 [symbolic = %pattern_type (constants.%pattern_type.f23)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.d40)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.c8b)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @A.F.%Self.as_type.loc6_14.1 (%Self.as_type.bb6)) -> type;
// CHECK:STDOUT: fn(%self.param: @A.F.%Self.binding.as_type (%Self.binding.as_type.d40)) -> type;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @B.G(@B.%Self: %B.type) {
// CHECK:STDOUT: %Self: %B.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.975)]
// CHECK:STDOUT: %Self.as_type.loc14_13.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_13.1 (constants.%Self.as_type.da9)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.88a)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> <error>;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @A.F(constants.%Self.0dd) {
// CHECK:STDOUT: %Self => constants.%Self.0dd
// CHECK:STDOUT: %Self.as_type.loc6_14.1 => constants.%Self.as_type.bb6
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.f23
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.d40
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c8b
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @B.G(constants.%Self.975) {
// CHECK:STDOUT: %Self => constants.%Self.975
// CHECK:STDOUT: %Self.as_type.loc14_13.1 => constants.%Self.as_type.da9
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.88a
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- call_with_compound_member_access.carbon
@@ -564,8 +564,8 @@ interface C {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %C.type: type = facet_type <@C> [concrete]
// CHECK:STDOUT: %Self: %C.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %C.F.type: type = fn_type @C.F [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %C.F: %C.F.type = struct_value () [concrete]
@@ -574,7 +574,7 @@ interface C {
// CHECK:STDOUT: %C.G.type: type = fn_type @C.G [concrete]
// CHECK:STDOUT: %C.G: %C.G.type = struct_value () [concrete]
// CHECK:STDOUT: %assoc1: %C.assoc_type = assoc_entity element1, @C.%C.G.decl [concrete]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.as_type [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %C.lookup_impl_witness: <witness> = lookup_impl_witness %Self, @C [symbolic]
// CHECK:STDOUT: %.3a5: type = fn_type_with_self_type %C.F.type, %Self [symbolic]
// CHECK:STDOUT: %impl.elem0: %.3a5 = impl_witness_access %C.lookup_impl_witness, element0 [symbolic]
@@ -602,26 +602,26 @@ interface C {
// CHECK:STDOUT: %self.patt: @C.F.%pattern_type (%pattern_type) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @C.F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @C.F.%Self.as_type.loc6_14.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.2 [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @C.F.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc6_14.1: type = splice_block %.loc6_14.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %C.type = name_ref Self, @C.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc6_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc6_14.2: type = converted %Self.ref, %Self.as_type.loc6_14.2 [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc6_14.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @C.F.%Self.as_type.loc6_14.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @C.F.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %C.assoc_type = assoc_entity element0, %C.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT: %C.G.decl: %C.G.type = fn_decl @C.G [concrete = constants.%C.G] {
// CHECK:STDOUT: %self.patt: @C.G.%pattern_type (%pattern_type) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @C.G.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @C.G.%Self.as_type.loc8_14.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc8_14.1: type = splice_block %.loc8_14.2 [symbolic = %Self.as_type.loc8_14.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @C.G.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc8_14.1: type = splice_block %.loc8_14.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %C.type = name_ref Self, @C.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc8_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc8_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc8_14.2: type = converted %Self.ref, %Self.as_type.loc8_14.2 [symbolic = %Self.as_type.loc8_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc8_14.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @C.G.%Self.as_type.loc8_14.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @C.G.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc1: %C.assoc_type = assoc_entity element1, %C.G.decl [concrete = constants.%assoc1]
// CHECK:STDOUT:
@@ -634,34 +634,34 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @C.F(@C.%Self: %C.type) {
// CHECK:STDOUT: %Self: %C.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc6_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc6_14.1 [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @C.F.%Self.as_type.loc6_14.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @C.F.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @C.G(@C.%Self: %C.type) {
// CHECK:STDOUT: %Self: %C.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc8_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc8_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc8_14.1 [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.as_type.loc8_14.1 [symbolic = %require_complete (constants.%require_complete)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.binding.as_type [symbolic = %require_complete (constants.%require_complete)]
// CHECK:STDOUT: %C.lookup_impl_witness: <witness> = lookup_impl_witness %Self, @C [symbolic = %C.lookup_impl_witness (constants.%C.lookup_impl_witness)]
// CHECK:STDOUT: %.loc9_9: type = fn_type_with_self_type constants.%C.F.type, %Self [symbolic = %.loc9_9 (constants.%.3a5)]
// CHECK:STDOUT: %impl.elem0.loc9_9.2: @C.G.%.loc9_9 (%.3a5) = impl_witness_access %C.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_9.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc9_9.2: <specific function> = specific_impl_function %impl.elem0.loc9_9.2, @C.F(%Self) [symbolic = %specific_impl_fn.loc9_9.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @C.G.%Self.as_type.loc8_14.1 (%Self.as_type)) {
// CHECK:STDOUT: fn(%self.param: @C.G.%Self.binding.as_type (%Self.binding.as_type)) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %self.ref.loc9: @C.G.%Self.as_type.loc8_14.1 (%Self.as_type) = name_ref self, %self
// CHECK:STDOUT: %self.ref.loc9: @C.G.%Self.binding.as_type (%Self.binding.as_type) = name_ref self, %self
// CHECK:STDOUT: %F.ref.loc9: %C.assoc_type = name_ref F, @C.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %impl.elem0.loc9_9.1: @C.G.%.loc9_9 (%.3a5) = impl_witness_access constants.%C.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_9.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %bound_method.loc9_9: <bound method> = bound_method %self.ref.loc9, %impl.elem0.loc9_9.1
// CHECK:STDOUT: %specific_impl_fn.loc9_9.1: <specific function> = specific_impl_function %impl.elem0.loc9_9.1, @C.F(constants.%Self) [symbolic = %specific_impl_fn.loc9_9.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT: %bound_method.loc9_12: <bound method> = bound_method %self.ref.loc9, %specific_impl_fn.loc9_9.1
// CHECK:STDOUT: %.loc9_12: init %empty_tuple.type = call %bound_method.loc9_12(%self.ref.loc9)
// CHECK:STDOUT: %self.ref.loc10: @C.G.%Self.as_type.loc8_14.1 (%Self.as_type) = name_ref self, %self
// CHECK:STDOUT: %self.ref.loc10: @C.G.%Self.binding.as_type (%Self.binding.as_type) = name_ref self, %self
// CHECK:STDOUT: %impl.elem0.loc10: @C.G.%.loc9_9 (%.3a5) = impl_witness_access constants.%C.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_9.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %F.ref.loc10: @C.G.%.loc9_9 (%.3a5) = name_ref F, %impl.elem0.loc10 [symbolic = %impl.elem0.loc9_9.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %bound_method.loc10_9: <bound method> = bound_method %self.ref.loc10, %F.ref.loc10
@@ -674,13 +674,13 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C.F(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc6_14.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C.G(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc8_14.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -33,8 +33,8 @@ fn Use(T:! I) {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type.d22: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.3f7: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete]
// CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
@@ -45,7 +45,7 @@ fn Use(T:! I) {
// CHECK:STDOUT: %pattern_type.09a: type = pattern_type %I.type [concrete]
// CHECK:STDOUT: %Use.type: type = fn_type @Use [concrete]
// CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %T, @I [symbolic]
// CHECK:STDOUT: %.a90: type = fn_type_with_self_type %I.F.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem0: %.a90 = impl_witness_access %I.lookup_impl_witness, element0 [symbolic]
@@ -72,16 +72,16 @@ fn Use(T:! I) {
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %I.F.decl: %I.F.type = fn_decl @I.F [concrete = constants.%I.F] {
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.d22) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.d22) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.3f7) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.3f7) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc5_14.1: type = splice_block %.loc5_14.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc5_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc5_14.2: type = converted %Self.ref, %Self.as_type.loc5_14.2 [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc5_14.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @I.F.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -93,17 +93,17 @@ fn Use(T:! I) {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc5_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc5_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc5_14.1 [symbolic = %pattern_type (constants.%pattern_type.d22)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.3f7)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc5_14.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Use(%T.loc8_8.2: %I.type) {
// CHECK:STDOUT: %T.loc8_8.1: %I.type = bind_symbolic_name T, 0 [symbolic = %T.loc8_8.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc13_4.2: type = facet_access_type %T.loc8_8.1 [symbolic = %T.as_type.loc13_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc8_8.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc8_8.1, @I [symbolic = %I.lookup_impl_witness (constants.%I.lookup_impl_witness)]
// CHECK:STDOUT: %.loc13_4.2: type = fn_type_with_self_type constants.%I.F.type, %T.loc8_8.1 [symbolic = %.loc13_4.2 (constants.%.a90)]
// CHECK:STDOUT: %impl.elem0.loc13_4.2: @Use.%.loc13_4.2 (%.a90) = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc13_4.2 (constants.%impl.elem0)]
@@ -113,8 +113,8 @@ fn Use(T:! I) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %T.ref: %I.type = name_ref T, %T.loc8_8.2 [symbolic = %T.loc8_8.1 (constants.%T)]
// CHECK:STDOUT: %F.ref: %I.assoc_type = name_ref F, @I.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %T.as_type.loc13_4.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc13_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc13_4.1: type = converted %T.ref, %T.as_type.loc13_4.1 [symbolic = %T.as_type.loc13_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc13_4.1: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %impl.elem0.loc13_4.1: @Use.%.loc13_4.2 (%.a90) = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc13_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: return
// CHECK:STDOUT: }
@@ -122,8 +122,8 @@ fn Use(T:! I) {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc5_14.1 => constants.%Self.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d22
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3f7
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Use(constants.%T) {
+11 -11
View File
@@ -127,8 +127,8 @@ interface Class { }
// CHECK:STDOUT: %Self.46e08f.1: %Interface.type.ba0a47.1 = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Interface.type.ba0a47.2: type = facet_type <@Interface.loc13> [concrete]
// CHECK:STDOUT: %Self.46e08f.2: %Interface.type.ba0a47.2 = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.46e08f.2 [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.46e08f.2 [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %Interface.F.type: type = fn_type @Interface.F [concrete]
// CHECK:STDOUT: %Interface.F: %Interface.F.type = struct_value () [concrete]
// CHECK:STDOUT: %Interface.assoc_type: type = assoc_entity_type @Interface.loc13 [concrete]
@@ -157,13 +157,13 @@ interface Class { }
// CHECK:STDOUT: %self.patt: @Interface.F.%pattern_type (%pattern_type) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @Interface.F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @Interface.F.%Self.as_type.loc14_14.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc14_14.1: type = splice_block %.loc14_14.2 [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @Interface.F.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc14_14.1: type = splice_block %.loc14_14.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %Interface.type.ba0a47.2 = name_ref Self, @Interface.loc13.%Self [symbolic = %Self (constants.%Self.46e08f.2)]
// CHECK:STDOUT: %Self.as_type.loc14_14.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc14_14.2: type = converted %Self.ref, %Self.as_type.loc14_14.2 [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc14_14.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @Interface.F.%Self.as_type.loc14_14.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @Interface.F.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, %Interface.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -175,15 +175,15 @@ interface Class { }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Interface.F(@Interface.loc13.%Self: %Interface.type.ba0a47.2) {
// CHECK:STDOUT: %Self: %Interface.type.ba0a47.2 = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self.46e08f.2)]
// CHECK:STDOUT: %Self.as_type.loc14_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc14_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc14_14.1 [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @Interface.F.%Self.as_type.loc14_14.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @Interface.F.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Interface.F(constants.%Self.46e08f.2) {
// CHECK:STDOUT: %Self => constants.%Self.46e08f.2
// CHECK:STDOUT: %Self.as_type.loc14_14.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -67,7 +67,7 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self]
// CHECK:STDOUT: %U: %Different.type = bind_symbolic_name U, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.fa7: type = pattern_type %Different.type [concrete]
// CHECK:STDOUT: %U.as_type: type = facet_access_type %U [symbolic]
// CHECK:STDOUT: %U.binding.as_type: type = symbolic_binding_type U, 0, %U [symbolic]
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: }
@@ -103,7 +103,7 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT: %U.ref: %Different.type = name_ref U, %U.loc32_6.2 [symbolic = %U.loc32_6.1 (constants.%U)]
// CHECK:STDOUT: %Interface.ref: type = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.type]
// CHECK:STDOUT: %T.ref: %Interface.assoc_type = name_ref T, @T.%assoc1 [concrete = constants.%assoc1]
// CHECK:STDOUT: %U.as_type.loc32_25.2: type = facet_access_type %U.ref [symbolic = %U.as_type.loc32_25.1 (constants.%U.as_type)]
// CHECK:STDOUT: %U.as_type: type = facet_access_type %U.ref [symbolic = %U.binding.as_type (constants.%U.binding.as_type)]
// CHECK:STDOUT: %.loc32: type = splice_block %Different.ref [concrete = constants.%Different.type] {
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Different.ref: type = name_ref Different, file.%Different.decl [concrete = constants.%Different.type]
@@ -165,7 +165,7 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @G(%U.loc32_6.2: %Different.type) {
// CHECK:STDOUT: %U.loc32_6.1: %Different.type = bind_symbolic_name U, 0 [symbolic = %U.loc32_6.1 (constants.%U)]
// CHECK:STDOUT: %U.as_type.loc32_25.1: type = facet_access_type %U.loc32_6.1 [symbolic = %U.as_type.loc32_25.1 (constants.%U.as_type)]
// CHECK:STDOUT: %U.binding.as_type: type = symbolic_binding_type U, 0, %U.loc32_6.1 [symbolic = %U.binding.as_type (constants.%U.binding.as_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> <error>;
// CHECK:STDOUT: }
@@ -176,6 +176,6 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT:
// CHECK:STDOUT: specific @G(constants.%U) {
// CHECK:STDOUT: %U.loc32_6.1 => constants.%U
// CHECK:STDOUT: %U.as_type.loc32_25.1 => constants.%U.as_type
// CHECK:STDOUT: %U.binding.as_type => constants.%U.binding.as_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
+22 -22
View File
@@ -157,8 +157,8 @@ interface I {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete]
// CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
@@ -178,13 +178,13 @@ interface I {
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc9_22.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc9_22.1: type = splice_block %.loc9_22.2 [symbolic = %Self.as_type.loc9_22.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc9_22.1: type = splice_block %.loc9_22.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc9_22.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc9_22.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc9_22.2: type = converted %Self.ref, %Self.as_type.loc9_22.2 [symbolic = %Self.as_type.loc9_22.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc9_22.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc9_22.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @I.F.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -196,15 +196,15 @@ interface I {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc9_22.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_22.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc9_22.1 [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc9_22.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc9_22.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -213,8 +213,8 @@ interface I {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %I.F.type: type = fn_type @I.F [concrete]
// CHECK:STDOUT: %I.F: %I.F.type = struct_value () [concrete]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
@@ -234,13 +234,13 @@ interface I {
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @I.F.%Self.as_type.loc9_24.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc9_24.1: type = splice_block %.loc9_24.2 [symbolic = %Self.as_type.loc9_24.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc9_24.1: type = splice_block %.loc9_24.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc9_24.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc9_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc9_24.2: type = converted %Self.ref, %Self.as_type.loc9_24.2 [symbolic = %Self.as_type.loc9_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc9_24.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @I.F.%Self.as_type.loc9_24.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @I.F.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -252,15 +252,15 @@ interface I {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc9_24.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc9_24.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc9_24.1 [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.as_type.loc9_24.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc9_24.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
+3 -3
View File
@@ -399,7 +399,7 @@ fn G(T:! Generic(B)) {
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %Self.a3e: %Generic.type.227 = bind_symbolic_name Self, 1 [symbolic]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.03b [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.03b [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -484,13 +484,13 @@ fn G(T:! Generic(B)) {
// CHECK:STDOUT: %T.loc10_6.1: %Generic.type.227 = bind_symbolic_name T, 0 [symbolic = %T.loc10_6.1 (constants.%T.03b)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc18_6.2: type = facet_access_type %T.loc10_6.1 [symbolic = %T.as_type.loc18_6.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc10_6.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F]
// CHECK:STDOUT: %T.ref: %Generic.type.227 = name_ref T, %T.loc10_6.2 [symbolic = %T.loc10_6.1 (constants.%T.03b)]
// CHECK:STDOUT: %T.as_type.loc18_6.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc18_6.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
+180 -180
View File
@@ -99,9 +99,9 @@ fn CallIndirect() {
// CHECK:STDOUT: %ptr.204: type = ptr_type %U.2cb [symbolic]
// CHECK:STDOUT: %pattern_type.eee: type = pattern_type %ptr.204 [symbolic]
// CHECK:STDOUT: %tuple.type.098: type = tuple_type (type, %A.type.d88, type) [symbolic]
// CHECK:STDOUT: %Self.as_type.707: type = facet_access_type %Self.c6b [symbolic]
// CHECK:STDOUT: %tuple.type.cb0: type = tuple_type (%T.8b3, %Self.as_type.707, %ptr.204) [symbolic]
// CHECK:STDOUT: %pattern_type.44d: type = pattern_type %tuple.type.cb0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.0eb: type = symbolic_binding_type Self, 1, %Self.c6b [symbolic]
// CHECK:STDOUT: %tuple.type.eee: type = tuple_type (%T.8b3, %Self.binding.as_type.0eb, %ptr.204) [symbolic]
// CHECK:STDOUT: %pattern_type.e5a: type = pattern_type %tuple.type.eee [symbolic]
// CHECK:STDOUT: %A.F.type.17a: type = fn_type @A.F, @A(%T.8b3) [symbolic]
// CHECK:STDOUT: %A.F.0d8: %A.F.type.17a = struct_value () [symbolic]
// CHECK:STDOUT: %A.assoc_type.ed3: type = assoc_entity_type @A, @A(%T.8b3) [symbolic]
@@ -155,43 +155,43 @@ fn CallIndirect() {
// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete]
// CHECK:STDOUT: %type_where: type = facet_type <type where .Self impls <CanDestroy>> [concrete]
// CHECK:STDOUT: %DestroyT: %type_where = bind_symbolic_name DestroyT, 0 [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%DestroyT) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.8a0: %DestroyT.as_type.as.Destroy.impl.Op.type.190 = struct_value () [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%DestroyT) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.544: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d = struct_value () [symbolic]
// CHECK:STDOUT: %facet_value.352: %type_where = facet_value %tuple.type.092, () [concrete]
// CHECK:STDOUT: %Destroy.impl_witness.89a: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value.352) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.ec5: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.352) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.ed3: %DestroyT.as_type.as.Destroy.impl.Op.type.ec5 = struct_value () [concrete]
// CHECK:STDOUT: %Destroy.impl_witness.0cc: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.352) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.092: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.352) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.3da: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.092 = struct_value () [concrete]
// CHECK:STDOUT: %ptr.5df: type = ptr_type %tuple.type.092 [concrete]
// CHECK:STDOUT: %complete_type.aab: <witness> = complete_type_witness %ptr.5df [concrete]
// CHECK:STDOUT: %Destroy.facet.d0e: %Destroy.type = facet_value %tuple.type.092, (%Destroy.impl_witness.89a) [concrete]
// CHECK:STDOUT: %.f61: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.d0e [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.71f: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.ed3, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.352) [concrete]
// CHECK:STDOUT: %Destroy.facet.f67: %Destroy.type = facet_value %tuple.type.092, (%Destroy.impl_witness.0cc) [concrete]
// CHECK:STDOUT: %.620: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.f67 [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.cd3: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.3da, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.352) [concrete]
// CHECK:STDOUT: %facet_value.4e3: %type_where = facet_value %Z, () [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.18a: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.dd5: %DestroyT.as_type.as.Destroy.impl.Op.type.18a = struct_value () [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.766: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.8e8: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.766 = struct_value () [concrete]
// CHECK:STDOUT: %complete_type.d3e: <witness> = complete_type_witness %ptr.fb6 [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.e7d: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.dd5, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.97f: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.8e8, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %T.7bf: %A.type.0a4 = bind_symbolic_name T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.809: type = pattern_type %A.type.0a4 [concrete]
// CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete]
// CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete]
// CHECK:STDOUT: %T.as_type.b3a: type = facet_access_type %T.7bf [symbolic]
// CHECK:STDOUT: %T.binding.as_type.4c5: type = symbolic_binding_type T, 0, %T.7bf [symbolic]
// CHECK:STDOUT: %A.lookup_impl_witness: <witness> = lookup_impl_witness %T.7bf, @A, @A(%X) [symbolic]
// CHECK:STDOUT: %.0c6: type = fn_type_with_self_type %A.F.type.13d, %T.7bf [symbolic]
// CHECK:STDOUT: %impl.elem0.dd2: %.0c6 = impl_witness_access %A.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %tuple.type.af6: type = tuple_type (%X, %T.as_type.b3a, %ptr.fb6) [symbolic]
// CHECK:STDOUT: %pattern_type.512: type = pattern_type %tuple.type.af6 [symbolic]
// CHECK:STDOUT: %tuple.type.6ee: type = tuple_type (%X, %T.binding.as_type.4c5, %ptr.fb6) [symbolic]
// CHECK:STDOUT: %pattern_type.4fd: type = pattern_type %tuple.type.6ee [symbolic]
// CHECK:STDOUT: %specific_impl_fn.304: <specific function> = specific_impl_function %impl.elem0.dd2, @A.F(%X, %T.7bf, %Z) [symbolic]
// CHECK:STDOUT: %require_complete.6ed: <witness> = require_complete_type %tuple.type.af6 [symbolic]
// CHECK:STDOUT: %facet_value.caf: %type_where = facet_value %tuple.type.af6, () [symbolic]
// CHECK:STDOUT: %Destroy.impl_witness.cbf: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value.caf) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.a49: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.caf) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.5ab: %DestroyT.as_type.as.Destroy.impl.Op.type.a49 = struct_value () [symbolic]
// CHECK:STDOUT: %ptr.fd2: type = ptr_type %tuple.type.af6 [symbolic]
// CHECK:STDOUT: %require_complete.b2a: <witness> = require_complete_type %ptr.fd2 [symbolic]
// CHECK:STDOUT: %Destroy.facet.679: %Destroy.type = facet_value %tuple.type.af6, (%Destroy.impl_witness.cbf) [symbolic]
// CHECK:STDOUT: %.b6d: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.679 [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.b61: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.5ab, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.caf) [symbolic]
// CHECK:STDOUT: %require_complete.439: <witness> = require_complete_type %tuple.type.6ee [symbolic]
// CHECK:STDOUT: %facet_value.017: %type_where = facet_value %tuple.type.6ee, () [symbolic]
// CHECK:STDOUT: %Destroy.impl_witness.5b3: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.017) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.e71: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.017) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.833: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.e71 = struct_value () [symbolic]
// CHECK:STDOUT: %ptr.641a: type = ptr_type %tuple.type.6ee [symbolic]
// CHECK:STDOUT: %require_complete.3d6: <witness> = require_complete_type %ptr.641a [symbolic]
// CHECK:STDOUT: %Destroy.facet.b1d: %Destroy.type = facet_value %tuple.type.6ee, (%Destroy.impl_witness.5b3) [symbolic]
// CHECK:STDOUT: %.dff: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.b1d [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.446: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.833, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.017) [symbolic]
// CHECK:STDOUT: %CallIndirect.type: type = fn_type @CallIndirect [concrete]
// CHECK:STDOUT: %CallIndirect: %CallIndirect.type = struct_value () [concrete]
// CHECK:STDOUT: %CallGeneric.specific_fn: <specific function> = specific_function %CallGeneric, @CallGeneric(%A.facet) [concrete]
@@ -216,8 +216,8 @@ fn CallIndirect() {
// CHECK:STDOUT: %Core.import_ref.0e4: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.31ff4e.1) = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.8a8b1a.1)]
// CHECK:STDOUT: %Copy.impl_witness_table.53c = impl_witness_table (%Core.import_ref.0e4), @ptr.as.Copy.impl [concrete]
// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
// CHECK:STDOUT: %Core.import_ref.d51: @DestroyT.as_type.as.Destroy.impl.%DestroyT.as_type.as.Destroy.impl.Op.type (%DestroyT.as_type.as.Destroy.impl.Op.type.190) = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [symbolic = @DestroyT.as_type.as.Destroy.impl.%DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.8a0)]
// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Core.import_ref.d51), @DestroyT.as_type.as.Destroy.impl [concrete]
// CHECK:STDOUT: %Core.import_ref.950: @DestroyT.binding.as_type.as.Destroy.impl.%DestroyT.binding.as_type.as.Destroy.impl.Op.type (%DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d) = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [symbolic = @DestroyT.binding.as_type.as.Destroy.impl.%DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.544)]
// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Core.import_ref.950), @DestroyT.binding.as_type.as.Destroy.impl [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -281,8 +281,8 @@ fn CallIndirect() {
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [concrete]
// CHECK:STDOUT: %u.patt: @A.F.%pattern_type.loc6_18 (%pattern_type.eee) = binding_pattern u [concrete]
// CHECK:STDOUT: %u.param_patt: @A.F.%pattern_type.loc6_18 (%pattern_type.eee) = value_param_pattern %u.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: @A.F.%pattern_type.loc6_25 (%pattern_type.44d) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @A.F.%pattern_type.loc6_25 (%pattern_type.44d) = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: %return.patt: @A.F.%pattern_type.loc6_25 (%pattern_type.e5a) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @A.F.%pattern_type.loc6_25 (%pattern_type.e5a) = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, @A.%T.loc5_13.2 [symbolic = %T (constants.%T.8b3)]
// CHECK:STDOUT: %.loc6_32: @A.F.%A.type (%A.type.d88) = specific_constant @A.%Self.1, @A(constants.%T.8b3) [symbolic = %Self (constants.%Self.c6b)]
@@ -290,9 +290,9 @@ fn CallIndirect() {
// CHECK:STDOUT: %U.ref.loc6_38: type = name_ref U, %U.loc6_8.2 [symbolic = %U.loc6_8.1 (constants.%U.2cb)]
// CHECK:STDOUT: %ptr.loc6_39: type = ptr_type %U.ref.loc6_38 [symbolic = %ptr.loc6_22.1 (constants.%ptr.204)]
// CHECK:STDOUT: %.loc6_40.1: @A.F.%tuple.type.loc6_40.1 (%tuple.type.098) = tuple_literal (%T.ref, %Self.ref, %ptr.loc6_39)
// CHECK:STDOUT: %Self.as_type.loc6_40.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc6_40.1 (constants.%Self.as_type.707)]
// CHECK:STDOUT: %.loc6_40.2: type = converted %Self.ref, %Self.as_type.loc6_40.2 [symbolic = %Self.as_type.loc6_40.1 (constants.%Self.as_type.707)]
// CHECK:STDOUT: %.loc6_40.3: type = converted %.loc6_40.1, constants.%tuple.type.cb0 [symbolic = %tuple.type.loc6_40.2 (constants.%tuple.type.cb0)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0eb)]
// CHECK:STDOUT: %.loc6_40.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0eb)]
// CHECK:STDOUT: %.loc6_40.3: type = converted %.loc6_40.1, constants.%tuple.type.eee [symbolic = %tuple.type.loc6_40.2 (constants.%tuple.type.eee)]
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %U.loc6_8.2: type = bind_symbolic_name U, 2 [symbolic = %U.loc6_8.1 (constants.%U.2cb)]
// CHECK:STDOUT: %u.param: @A.F.%ptr.loc6_22.1 (%ptr.204) = value_param call_param0
@@ -301,8 +301,8 @@ fn CallIndirect() {
// CHECK:STDOUT: %ptr.loc6_22.2: type = ptr_type %U.ref.loc6_21 [symbolic = %ptr.loc6_22.1 (constants.%ptr.204)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %u: @A.F.%ptr.loc6_22.1 (%ptr.204) = bind_name u, %u.param
// CHECK:STDOUT: %return.param: ref @A.F.%tuple.type.loc6_40.2 (%tuple.type.cb0) = out_param call_param1
// CHECK:STDOUT: %return: ref @A.F.%tuple.type.loc6_40.2 (%tuple.type.cb0) = return_slot %return.param
// CHECK:STDOUT: %return.param: ref @A.F.%tuple.type.loc6_40.2 (%tuple.type.eee) = out_param call_param1
// CHECK:STDOUT: %return: ref @A.F.%tuple.type.loc6_40.2 (%tuple.type.eee) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0.loc6_41.1: @A.%A.assoc_type (%A.assoc_type.ed3) = assoc_entity element0, %A.F.decl [symbolic = %assoc0.loc6_41.2 (constants.%assoc0.fcb)]
// CHECK:STDOUT:
@@ -379,11 +379,11 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T)> [symbolic = %A.type (constants.%A.type.d88)]
// CHECK:STDOUT: %Self: @A.F.%A.type (%A.type.d88) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.c6b)]
// CHECK:STDOUT: %tuple.type.loc6_40.1: type = tuple_type (type, %A.type, type) [symbolic = %tuple.type.loc6_40.1 (constants.%tuple.type.098)]
// CHECK:STDOUT: %Self.as_type.loc6_40.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_40.1 (constants.%Self.as_type.707)]
// CHECK:STDOUT: %tuple.type.loc6_40.2: type = tuple_type (%T, %Self.as_type.loc6_40.1, %ptr.loc6_22.1) [symbolic = %tuple.type.loc6_40.2 (constants.%tuple.type.cb0)]
// CHECK:STDOUT: %pattern_type.loc6_25: type = pattern_type %tuple.type.loc6_40.2 [symbolic = %pattern_type.loc6_25 (constants.%pattern_type.44d)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0eb)]
// CHECK:STDOUT: %tuple.type.loc6_40.2: type = tuple_type (%T, %Self.binding.as_type, %ptr.loc6_22.1) [symbolic = %tuple.type.loc6_40.2 (constants.%tuple.type.eee)]
// CHECK:STDOUT: %pattern_type.loc6_25: type = pattern_type %tuple.type.loc6_40.2 [symbolic = %pattern_type.loc6_25 (constants.%pattern_type.e5a)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%u.param: @A.F.%ptr.loc6_22.1 (%ptr.204)) -> @A.F.%tuple.type.loc6_40.2 (%tuple.type.cb0);
// CHECK:STDOUT: fn(%u.param: @A.F.%ptr.loc6_22.1 (%ptr.204)) -> @A.F.%tuple.type.loc6_40.2 (%tuple.type.eee);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Y.as.A.impl.F(%U.loc16_8.2: type) {
@@ -457,18 +457,18 @@ fn CallIndirect() {
// CHECK:STDOUT: %.loc23_22.2: ref %tuple.type.092 = temporary %.loc23_22.1, %Y.as.A.impl.F.call
// CHECK:STDOUT: %facet_value.loc23: %type_where = facet_value constants.%tuple.type.092, () [concrete = constants.%facet_value.352]
// CHECK:STDOUT: %.loc23_22.3: %type_where = converted constants.%tuple.type.092, %facet_value.loc23 [concrete = constants.%facet_value.352]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound.loc23: <bound method> = bound_method %.loc23_22.2, constants.%DestroyT.as_type.as.Destroy.impl.Op.ed3
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.ed3, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.352) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.71f]
// CHECK:STDOUT: %bound_method.loc23: <bound method> = bound_method %.loc23_22.2, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc23: <bound method> = bound_method %.loc23_22.2, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.3da
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.3da, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.352) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.cd3]
// CHECK:STDOUT: %bound_method.loc23: <bound method> = bound_method %.loc23_22.2, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %addr.loc23_22: %ptr.5df = addr_of %.loc23_22.2
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23_22)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23_22)
// CHECK:STDOUT: %facet_value.loc22: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %.loc22: %type_where = converted constants.%Z, %facet_value.loc22 [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound.loc22: <bound method> = bound_method %u.var, constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.e7d]
// CHECK:STDOUT: %bound_method.loc22: <bound method> = bound_method %u.var, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc22: <bound method> = bound_method %u.var, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.2: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.97f]
// CHECK:STDOUT: %bound_method.loc22: <bound method> = bound_method %u.var, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.2
// CHECK:STDOUT: %addr.loc22: %ptr.fb6 = addr_of %u.var
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc22: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -476,22 +476,22 @@ fn CallIndirect() {
// CHECK:STDOUT: %T.loc26_16.1: %A.type.0a4 = bind_symbolic_name T, 0 [symbolic = %T.loc26_16.1 (constants.%T.7bf)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc28_4.2: type = facet_access_type %T.loc26_16.1 [symbolic = %T.as_type.loc28_4.2 (constants.%T.as_type.b3a)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc26_16.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type.4c5)]
// CHECK:STDOUT: %A.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc26_16.1, @A, @A(constants.%X) [symbolic = %A.lookup_impl_witness (constants.%A.lookup_impl_witness)]
// CHECK:STDOUT: %.loc28_4.3: type = fn_type_with_self_type constants.%A.F.type.13d, %T.loc26_16.1 [symbolic = %.loc28_4.3 (constants.%.0c6)]
// CHECK:STDOUT: %impl.elem0.loc28_4.2: @CallGeneric.%.loc28_4.3 (%.0c6) = impl_witness_access %A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_4.2 (constants.%impl.elem0.dd2)]
// CHECK:STDOUT: %specific_impl_fn.loc28_4.2: <specific function> = specific_impl_function %impl.elem0.loc28_4.2, @A.F(constants.%X, %T.loc26_16.1, constants.%Z) [symbolic = %specific_impl_fn.loc28_4.2 (constants.%specific_impl_fn.304)]
// CHECK:STDOUT: %tuple.type: type = tuple_type (constants.%X, %T.as_type.loc28_4.2, constants.%ptr.fb6) [symbolic = %tuple.type (constants.%tuple.type.af6)]
// CHECK:STDOUT: %require_complete.loc28_12.1: <witness> = require_complete_type %tuple.type [symbolic = %require_complete.loc28_12.1 (constants.%require_complete.6ed)]
// CHECK:STDOUT: %facet_value.loc28_12.2: %type_where = facet_value %tuple.type, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.caf)]
// CHECK:STDOUT: %Destroy.impl_witness: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.cbf)]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %tuple.type, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.679)]
// CHECK:STDOUT: %.loc28_12.5: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc28_12.5 (constants.%.b6d)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.type (constants.%DestroyT.as_type.as.Destroy.impl.Op.type.a49)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op: @CallGeneric.%DestroyT.as_type.as.Destroy.impl.Op.type (%DestroyT.as_type.as.Destroy.impl.Op.type.a49) = struct_value () [symbolic = %DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.5ab)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.loc28_12.2) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.b61)]
// CHECK:STDOUT: %ptr: type = ptr_type %tuple.type [symbolic = %ptr (constants.%ptr.fd2)]
// CHECK:STDOUT: %require_complete.loc28_12.2: <witness> = require_complete_type %ptr [symbolic = %require_complete.loc28_12.2 (constants.%require_complete.b2a)]
// CHECK:STDOUT: %tuple.type: type = tuple_type (constants.%X, %T.binding.as_type, constants.%ptr.fb6) [symbolic = %tuple.type (constants.%tuple.type.6ee)]
// CHECK:STDOUT: %require_complete.loc28_12.1: <witness> = require_complete_type %tuple.type [symbolic = %require_complete.loc28_12.1 (constants.%require_complete.439)]
// CHECK:STDOUT: %facet_value.loc28_12.2: %type_where = facet_value %tuple.type, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.017)]
// CHECK:STDOUT: %Destroy.impl_witness: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.5b3)]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %tuple.type, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.b1d)]
// CHECK:STDOUT: %.loc28_12.5: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc28_12.5 (constants.%.dff)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.type (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.type.e71)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op: @CallGeneric.%DestroyT.binding.as_type.as.Destroy.impl.Op.type (%DestroyT.binding.as_type.as.Destroy.impl.Op.type.e71) = struct_value () [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.833)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.loc28_12.2) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.446)]
// CHECK:STDOUT: %ptr: type = ptr_type %tuple.type [symbolic = %ptr (constants.%ptr.641a)]
// CHECK:STDOUT: %require_complete.loc28_12.2: <witness> = require_complete_type %ptr [symbolic = %require_complete.loc28_12.2 (constants.%require_complete.3d6)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
@@ -505,31 +505,31 @@ fn CallIndirect() {
// CHECK:STDOUT: %T.ref: %A.type.0a4 = name_ref T, %T.loc26_16.2 [symbolic = %T.loc26_16.1 (constants.%T.7bf)]
// CHECK:STDOUT: %.loc28_4.1: %A.assoc_type.296 = specific_constant @A.%assoc0.loc6_41.1, @A(constants.%X) [concrete = constants.%assoc0.5f6]
// CHECK:STDOUT: %F.ref: %A.assoc_type.296 = name_ref F, %.loc28_4.1 [concrete = constants.%assoc0.5f6]
// CHECK:STDOUT: %T.as_type.loc28_4.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc28_4.2 (constants.%T.as_type.b3a)]
// CHECK:STDOUT: %.loc28_4.2: type = converted %T.ref, %T.as_type.loc28_4.1 [symbolic = %T.as_type.loc28_4.2 (constants.%T.as_type.b3a)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type.4c5)]
// CHECK:STDOUT: %.loc28_4.2: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type.4c5)]
// CHECK:STDOUT: %impl.elem0.loc28_4.1: @CallGeneric.%.loc28_4.3 (%.0c6) = impl_witness_access constants.%A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_4.2 (constants.%impl.elem0.dd2)]
// CHECK:STDOUT: %Z.ref.loc28: type = name_ref Z, file.%Z.decl [concrete = constants.%Z]
// CHECK:STDOUT: %u.ref: ref %Z = name_ref u, %u
// CHECK:STDOUT: %addr.loc28_10: %ptr.fb6 = addr_of %u.ref
// CHECK:STDOUT: %specific_impl_fn.loc28_4.1: <specific function> = specific_impl_function %impl.elem0.loc28_4.1, @A.F(constants.%X, constants.%T.7bf, constants.%Z) [symbolic = %specific_impl_fn.loc28_4.2 (constants.%specific_impl_fn.304)]
// CHECK:STDOUT: %.loc28_12.1: ref @CallGeneric.%tuple.type (%tuple.type.af6) = temporary_storage
// CHECK:STDOUT: %.loc28_12.2: init @CallGeneric.%tuple.type (%tuple.type.af6) = call %specific_impl_fn.loc28_4.1(%addr.loc28_10) to %.loc28_12.1
// CHECK:STDOUT: %.loc28_12.3: ref @CallGeneric.%tuple.type (%tuple.type.af6) = temporary %.loc28_12.1, %.loc28_12.2
// CHECK:STDOUT: %facet_value.loc28_12.1: %type_where = facet_value constants.%tuple.type.af6, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.caf)]
// CHECK:STDOUT: %.loc28_12.4: %type_where = converted constants.%tuple.type.af6, %facet_value.loc28_12.1 [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.caf)]
// CHECK:STDOUT: %impl.elem0.loc28_12: @CallGeneric.%.loc28_12.5 (%.b6d) = impl_witness_access constants.%Destroy.impl_witness.cbf, element0 [symbolic = %DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.5ab)]
// CHECK:STDOUT: %.loc28_12.1: ref @CallGeneric.%tuple.type (%tuple.type.6ee) = temporary_storage
// CHECK:STDOUT: %.loc28_12.2: init @CallGeneric.%tuple.type (%tuple.type.6ee) = call %specific_impl_fn.loc28_4.1(%addr.loc28_10) to %.loc28_12.1
// CHECK:STDOUT: %.loc28_12.3: ref @CallGeneric.%tuple.type (%tuple.type.6ee) = temporary %.loc28_12.1, %.loc28_12.2
// CHECK:STDOUT: %facet_value.loc28_12.1: %type_where = facet_value constants.%tuple.type.6ee, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.017)]
// CHECK:STDOUT: %.loc28_12.4: %type_where = converted constants.%tuple.type.6ee, %facet_value.loc28_12.1 [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.017)]
// CHECK:STDOUT: %impl.elem0.loc28_12: @CallGeneric.%.loc28_12.5 (%.dff) = impl_witness_access constants.%Destroy.impl_witness.5b3, element0 [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.833)]
// CHECK:STDOUT: %bound_method.loc28_12.1: <bound method> = bound_method %.loc28_12.3, %impl.elem0.loc28_12
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0.loc28_12, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.caf) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.b61)]
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0.loc28_12, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.017) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.446)]
// CHECK:STDOUT: %bound_method.loc28_12.2: <bound method> = bound_method %.loc28_12.3, %specific_fn
// CHECK:STDOUT: %addr.loc28_12: @CallGeneric.%ptr (%ptr.fd2) = addr_of %.loc28_12.3
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc28: init %empty_tuple.type = call %bound_method.loc28_12.2(%addr.loc28_12)
// CHECK:STDOUT: %addr.loc28_12: @CallGeneric.%ptr (%ptr.641a) = addr_of %.loc28_12.3
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc28: init %empty_tuple.type = call %bound_method.loc28_12.2(%addr.loc28_12)
// CHECK:STDOUT: %facet_value.loc27: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %.loc27: %type_where = converted constants.%Z, %facet_value.loc27 [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound: <bound method> = bound_method %u.var, constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.e7d]
// CHECK:STDOUT: %bound_method.loc27: <bound method> = bound_method %u.var, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound: <bound method> = bound_method %u.var, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.97f]
// CHECK:STDOUT: %bound_method.loc27: <bound method> = bound_method %u.var, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %addr.loc27: %ptr.fb6 = addr_of %u.var
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc27: init %empty_tuple.type = call %bound_method.loc27(%addr.loc27)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc27: init %empty_tuple.type = call %bound_method.loc27(%addr.loc27)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
@@ -557,9 +557,9 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.d88
// CHECK:STDOUT: %Self => constants.%Self.c6b
// CHECK:STDOUT: %tuple.type.loc6_40.1 => constants.%tuple.type.098
// CHECK:STDOUT: %Self.as_type.loc6_40.1 => constants.%Self.as_type.707
// CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.cb0
// CHECK:STDOUT: %pattern_type.loc6_25 => constants.%pattern_type.44d
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.0eb
// CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.eee
// CHECK:STDOUT: %pattern_type.loc6_25 => constants.%pattern_type.e5a
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @A(constants.%X) {
@@ -590,7 +590,7 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.0a4
// CHECK:STDOUT: %Self => constants.%A.facet
// CHECK:STDOUT: %tuple.type.loc6_40.1 => constants.%tuple.type.5a1
// CHECK:STDOUT: %Self.as_type.loc6_40.1 => constants.%Y
// CHECK:STDOUT: %Self.binding.as_type => constants.%Y
// CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.c14
// CHECK:STDOUT: %pattern_type.loc6_25 => constants.%pattern_type.ac9
// CHECK:STDOUT: }
@@ -625,16 +625,16 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.0a4
// CHECK:STDOUT: %Self => constants.%T.7bf
// CHECK:STDOUT: %tuple.type.loc6_40.1 => constants.%tuple.type.5a1
// CHECK:STDOUT: %Self.as_type.loc6_40.1 => constants.%T.as_type.b3a
// CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.af6
// CHECK:STDOUT: %pattern_type.loc6_25 => constants.%pattern_type.512
// CHECK:STDOUT: %Self.binding.as_type => constants.%T.binding.as_type.4c5
// CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.6ee
// CHECK:STDOUT: %pattern_type.loc6_25 => constants.%pattern_type.4fd
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @CallGeneric(constants.%A.facet) {
// CHECK:STDOUT: %T.loc26_16.1 => constants.%A.facet
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc28_4.2 => constants.%Y
// CHECK:STDOUT: %T.binding.as_type => constants.%Y
// CHECK:STDOUT: %A.lookup_impl_witness => constants.%A.impl_witness
// CHECK:STDOUT: %.loc28_4.3 => constants.%.d35
// CHECK:STDOUT: %impl.elem0.loc28_4.2 => constants.%Y.as.A.impl.F
@@ -642,12 +642,12 @@ fn CallIndirect() {
// CHECK:STDOUT: %tuple.type => constants.%tuple.type.092
// CHECK:STDOUT: %require_complete.loc28_12.1 => constants.%complete_type.05d
// CHECK:STDOUT: %facet_value.loc28_12.2 => constants.%facet_value.352
// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.89a
// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.d0e
// CHECK:STDOUT: %.loc28_12.5 => constants.%.f61
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type => constants.%DestroyT.as_type.as.Destroy.impl.Op.type.ec5
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op => constants.%DestroyT.as_type.as.Destroy.impl.Op.ed3
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28 => constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.71f
// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.0cc
// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.f67
// CHECK:STDOUT: %.loc28_12.5 => constants.%.620
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type => constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.type.092
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op => constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.3da
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28 => constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.cd3
// CHECK:STDOUT: %ptr => constants.%ptr.5df
// CHECK:STDOUT: %require_complete.loc28_12.2 => constants.%complete_type.aab
// CHECK:STDOUT: }
@@ -660,7 +660,7 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.0a4
// CHECK:STDOUT: %Self => constants.%A.facet
// CHECK:STDOUT: %tuple.type.loc6_40.1 => constants.%tuple.type.5a1
// CHECK:STDOUT: %Self.as_type.loc6_40.1 => constants.%Y
// CHECK:STDOUT: %Self.binding.as_type => constants.%Y
// CHECK:STDOUT: %tuple.type.loc6_40.2 => constants.%tuple.type.092
// CHECK:STDOUT: %pattern_type.loc6_25 => constants.%pattern_type.48d
// CHECK:STDOUT: }
@@ -680,9 +680,9 @@ fn CallIndirect() {
// CHECK:STDOUT: %U.2cb: type = bind_symbolic_name U, 2 [symbolic]
// CHECK:STDOUT: %pattern_type.20f: type = pattern_type %U.2cb [symbolic]
// CHECK:STDOUT: %tuple.type.098: type = tuple_type (type, %A.type.d88, type) [symbolic]
// CHECK:STDOUT: %Self.as_type.707: type = facet_access_type %Self.c6b [symbolic]
// CHECK:STDOUT: %tuple.type.325: type = tuple_type (%T.8b3, %Self.as_type.707, %U.2cb) [symbolic]
// CHECK:STDOUT: %pattern_type.491: type = pattern_type %tuple.type.325 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.0eb: type = symbolic_binding_type Self, 1, %Self.c6b [symbolic]
// CHECK:STDOUT: %tuple.type.253: type = tuple_type (%T.8b3, %Self.binding.as_type.0eb, %U.2cb) [symbolic]
// CHECK:STDOUT: %pattern_type.bca: type = pattern_type %tuple.type.253 [symbolic]
// CHECK:STDOUT: %A.F.type.17a: type = fn_type @A.F, @A(%T.8b3) [symbolic]
// CHECK:STDOUT: %A.F.0d8: %A.F.type.17a = struct_value () [symbolic]
// CHECK:STDOUT: %A.assoc_type.ed3: type = assoc_entity_type @A, @A(%T.8b3) [symbolic]
@@ -742,44 +742,44 @@ fn CallIndirect() {
// CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete]
// CHECK:STDOUT: %type_where: type = facet_type <type where .Self impls <CanDestroy>> [concrete]
// CHECK:STDOUT: %DestroyT: %type_where = bind_symbolic_name DestroyT, 0 [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.190: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%DestroyT) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.8a0: %DestroyT.as_type.as.Destroy.impl.Op.type.190 = struct_value () [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%DestroyT) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.544: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d = struct_value () [symbolic]
// CHECK:STDOUT: %facet_value.71a: %type_where = facet_value %tuple.type.415, () [concrete]
// CHECK:STDOUT: %Destroy.impl_witness.37a: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value.71a) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.d92: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.71a) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.f1a: %DestroyT.as_type.as.Destroy.impl.Op.type.d92 = struct_value () [concrete]
// CHECK:STDOUT: %Destroy.impl_witness.5ea: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.71a) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.6ef: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.71a) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.aa7: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.6ef = struct_value () [concrete]
// CHECK:STDOUT: %ptr.ad9: type = ptr_type %tuple.type.415 [concrete]
// CHECK:STDOUT: %complete_type.e23: <witness> = complete_type_witness %ptr.ad9 [concrete]
// CHECK:STDOUT: %Destroy.facet.684: %Destroy.type = facet_value %tuple.type.415, (%Destroy.impl_witness.37a) [concrete]
// CHECK:STDOUT: %.27f: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.684 [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.578: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.f1a, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.71a) [concrete]
// CHECK:STDOUT: %Destroy.facet.ec3: %Destroy.type = facet_value %tuple.type.415, (%Destroy.impl_witness.5ea) [concrete]
// CHECK:STDOUT: %.e92: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.ec3 [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.300: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.aa7, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.71a) [concrete]
// CHECK:STDOUT: %facet_value.4e3: %type_where = facet_value %Z, () [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.18a: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.dd5: %DestroyT.as_type.as.Destroy.impl.Op.type.18a = struct_value () [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.766: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.8e8: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.766 = struct_value () [concrete]
// CHECK:STDOUT: %ptr.fb6: type = ptr_type %Z [concrete]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.e7d: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.dd5, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.97f: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.8e8, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.4e3) [concrete]
// CHECK:STDOUT: %T.7bf: %A.type.0a4 = bind_symbolic_name T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.809: type = pattern_type %A.type.0a4 [concrete]
// CHECK:STDOUT: %CallGeneric.type: type = fn_type @CallGeneric [concrete]
// CHECK:STDOUT: %CallGeneric: %CallGeneric.type = struct_value () [concrete]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.7bf [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.7bf [symbolic]
// CHECK:STDOUT: %A.lookup_impl_witness: <witness> = lookup_impl_witness %T.7bf, @A, @A(%X) [symbolic]
// CHECK:STDOUT: %.0c6: type = fn_type_with_self_type %A.F.type.13d, %T.7bf [symbolic]
// CHECK:STDOUT: %impl.elem0: %.0c6 = impl_witness_access %A.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %tuple.type.5a1: type = tuple_type (type, %A.type.0a4, type) [concrete]
// CHECK:STDOUT: %tuple.type.780: type = tuple_type (%X, %T.as_type, %Z) [symbolic]
// CHECK:STDOUT: %pattern_type.f87: type = pattern_type %tuple.type.780 [symbolic]
// CHECK:STDOUT: %tuple.type.16c: type = tuple_type (%X, %T.binding.as_type, %Z) [symbolic]
// CHECK:STDOUT: %pattern_type.c32: type = pattern_type %tuple.type.16c [symbolic]
// CHECK:STDOUT: %specific_impl_fn: <specific function> = specific_impl_function %impl.elem0, @A.F(%X, %T.7bf, %Z) [symbolic]
// CHECK:STDOUT: %require_complete.4ef: <witness> = require_complete_type %tuple.type.780 [symbolic]
// CHECK:STDOUT: %facet_value.52b: %type_where = facet_value %tuple.type.780, () [symbolic]
// CHECK:STDOUT: %Destroy.impl_witness.aa0: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value.52b) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type.7cc: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.52b) [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.24b: %DestroyT.as_type.as.Destroy.impl.Op.type.7cc = struct_value () [symbolic]
// CHECK:STDOUT: %ptr.563: type = ptr_type %tuple.type.780 [symbolic]
// CHECK:STDOUT: %require_complete.147: <witness> = require_complete_type %ptr.563 [symbolic]
// CHECK:STDOUT: %Destroy.facet.324: %Destroy.type = facet_value %tuple.type.780, (%Destroy.impl_witness.aa0) [symbolic]
// CHECK:STDOUT: %.a30: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.324 [symbolic]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2bf: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op.24b, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.52b) [symbolic]
// CHECK:STDOUT: %require_complete.788: <witness> = require_complete_type %tuple.type.16c [symbolic]
// CHECK:STDOUT: %facet_value.237: %type_where = facet_value %tuple.type.16c, () [symbolic]
// CHECK:STDOUT: %Destroy.impl_witness.6de: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.237) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b35: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.237) [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.cae: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.b35 = struct_value () [symbolic]
// CHECK:STDOUT: %ptr.784: type = ptr_type %tuple.type.16c [symbolic]
// CHECK:STDOUT: %require_complete.8be: <witness> = require_complete_type %ptr.784 [symbolic]
// CHECK:STDOUT: %Destroy.facet.837: %Destroy.type = facet_value %tuple.type.16c, (%Destroy.impl_witness.6de) [symbolic]
// CHECK:STDOUT: %.a5a: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.837 [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.d49: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op.cae, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.237) [symbolic]
// CHECK:STDOUT: %CallIndirect.type: type = fn_type @CallIndirect [concrete]
// CHECK:STDOUT: %CallIndirect: %CallIndirect.type = struct_value () [concrete]
// CHECK:STDOUT: %CallGeneric.specific_fn: <specific function> = specific_function %CallGeneric, @CallGeneric(%A.facet.cdd) [concrete]
@@ -793,8 +793,8 @@ fn CallIndirect() {
// CHECK:STDOUT: import Core//prelude/...
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
// CHECK:STDOUT: %Core.import_ref.d51: @DestroyT.as_type.as.Destroy.impl.%DestroyT.as_type.as.Destroy.impl.Op.type (%DestroyT.as_type.as.Destroy.impl.Op.type.190) = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [symbolic = @DestroyT.as_type.as.Destroy.impl.%DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.8a0)]
// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Core.import_ref.d51), @DestroyT.as_type.as.Destroy.impl [concrete]
// CHECK:STDOUT: %Core.import_ref.950: @DestroyT.binding.as_type.as.Destroy.impl.%DestroyT.binding.as_type.as.Destroy.impl.Op.type (%DestroyT.binding.as_type.as.Destroy.impl.Op.type.b5d) = import_ref Core//prelude/parts/destroy, loc{{\d+_\d+}}, loaded [symbolic = @DestroyT.binding.as_type.as.Destroy.impl.%DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.544)]
// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Core.import_ref.950), @DestroyT.binding.as_type.as.Destroy.impl [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -873,24 +873,24 @@ fn CallIndirect() {
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [concrete]
// CHECK:STDOUT: %u.patt: @A.F.%pattern_type.loc6_18 (%pattern_type.20f) = binding_pattern u [concrete]
// CHECK:STDOUT: %u.param_patt: @A.F.%pattern_type.loc6_18 (%pattern_type.20f) = value_param_pattern %u.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: @A.F.%pattern_type.loc6_24 (%pattern_type.491) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @A.F.%pattern_type.loc6_24 (%pattern_type.491) = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: %return.patt: @A.F.%pattern_type.loc6_24 (%pattern_type.bca) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @A.F.%pattern_type.loc6_24 (%pattern_type.bca) = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, @A.%T.loc5_13.2 [symbolic = %T (constants.%T.8b3)]
// CHECK:STDOUT: %.loc6_31: @A.F.%A.type (%A.type.d88) = specific_constant @A.%Self.1, @A(constants.%T.8b3) [symbolic = %Self (constants.%Self.c6b)]
// CHECK:STDOUT: %Self.ref: @A.F.%A.type (%A.type.d88) = name_ref Self, %.loc6_31 [symbolic = %Self (constants.%Self.c6b)]
// CHECK:STDOUT: %U.ref.loc6_37: type = name_ref U, %U.loc6_8.2 [symbolic = %U.loc6_8.1 (constants.%U.2cb)]
// CHECK:STDOUT: %.loc6_38.1: @A.F.%tuple.type.loc6_38.1 (%tuple.type.098) = tuple_literal (%T.ref, %Self.ref, %U.ref.loc6_37)
// CHECK:STDOUT: %Self.as_type.loc6_38.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc6_38.1 (constants.%Self.as_type.707)]
// CHECK:STDOUT: %.loc6_38.2: type = converted %Self.ref, %Self.as_type.loc6_38.2 [symbolic = %Self.as_type.loc6_38.1 (constants.%Self.as_type.707)]
// CHECK:STDOUT: %.loc6_38.3: type = converted %.loc6_38.1, constants.%tuple.type.325 [symbolic = %tuple.type.loc6_38.2 (constants.%tuple.type.325)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0eb)]
// CHECK:STDOUT: %.loc6_38.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0eb)]
// CHECK:STDOUT: %.loc6_38.3: type = converted %.loc6_38.1, constants.%tuple.type.253 [symbolic = %tuple.type.loc6_38.2 (constants.%tuple.type.253)]
// CHECK:STDOUT: %.Self: %type = bind_symbolic_name .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %U.loc6_8.2: type = bind_symbolic_name U, 2 [symbolic = %U.loc6_8.1 (constants.%U.2cb)]
// CHECK:STDOUT: %u.param: @A.F.%U.loc6_8.1 (%U.2cb) = value_param call_param0
// CHECK:STDOUT: %U.ref.loc6_21: type = name_ref U, %U.loc6_8.2 [symbolic = %U.loc6_8.1 (constants.%U.2cb)]
// CHECK:STDOUT: %u: @A.F.%U.loc6_8.1 (%U.2cb) = bind_name u, %u.param
// CHECK:STDOUT: %return.param: ref @A.F.%tuple.type.loc6_38.2 (%tuple.type.325) = out_param call_param1
// CHECK:STDOUT: %return: ref @A.F.%tuple.type.loc6_38.2 (%tuple.type.325) = return_slot %return.param
// CHECK:STDOUT: %return.param: ref @A.F.%tuple.type.loc6_38.2 (%tuple.type.253) = out_param call_param1
// CHECK:STDOUT: %return: ref @A.F.%tuple.type.loc6_38.2 (%tuple.type.253) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0.loc6_39.1: @A.%A.assoc_type (%A.assoc_type.ed3) = assoc_entity element0, %A.F.decl [symbolic = %assoc0.loc6_39.2 (constants.%assoc0.fcb)]
// CHECK:STDOUT:
@@ -988,11 +988,11 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T)> [symbolic = %A.type (constants.%A.type.d88)]
// CHECK:STDOUT: %Self: @A.F.%A.type (%A.type.d88) = bind_symbolic_name Self, 1 [symbolic = %Self (constants.%Self.c6b)]
// CHECK:STDOUT: %tuple.type.loc6_38.1: type = tuple_type (type, %A.type, type) [symbolic = %tuple.type.loc6_38.1 (constants.%tuple.type.098)]
// CHECK:STDOUT: %Self.as_type.loc6_38.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc6_38.1 (constants.%Self.as_type.707)]
// CHECK:STDOUT: %tuple.type.loc6_38.2: type = tuple_type (%T, %Self.as_type.loc6_38.1, %U.loc6_8.1) [symbolic = %tuple.type.loc6_38.2 (constants.%tuple.type.325)]
// CHECK:STDOUT: %pattern_type.loc6_24: type = pattern_type %tuple.type.loc6_38.2 [symbolic = %pattern_type.loc6_24 (constants.%pattern_type.491)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0eb)]
// CHECK:STDOUT: %tuple.type.loc6_38.2: type = tuple_type (%T, %Self.binding.as_type, %U.loc6_8.1) [symbolic = %tuple.type.loc6_38.2 (constants.%tuple.type.253)]
// CHECK:STDOUT: %pattern_type.loc6_24: type = pattern_type %tuple.type.loc6_38.2 [symbolic = %pattern_type.loc6_24 (constants.%pattern_type.bca)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%u.param: @A.F.%U.loc6_8.1 (%U.2cb)) -> @A.F.%tuple.type.loc6_38.2 (%tuple.type.325);
// CHECK:STDOUT: fn(%u.param: @A.F.%U.loc6_8.1 (%U.2cb)) -> @A.F.%tuple.type.loc6_38.2 (%tuple.type.253);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @tuple.type.as.A.impl.F(@tuple.type.as.A.impl.%V1.loc14_14.2: type, @tuple.type.as.A.impl.%V2.loc14_25.2: type, @tuple.type.as.A.impl.%W.loc14_36.2: type, %U.loc17_8.2: type) {
@@ -1054,18 +1054,18 @@ fn CallIndirect() {
// CHECK:STDOUT: %.loc24_39.2: ref %tuple.type.415 = temporary %.loc24_39.1, %tuple.type.as.A.impl.F.call
// CHECK:STDOUT: %facet_value.loc24_39: %type_where = facet_value constants.%tuple.type.415, () [concrete = constants.%facet_value.71a]
// CHECK:STDOUT: %.loc24_39.3: %type_where = converted constants.%tuple.type.415, %facet_value.loc24_39 [concrete = constants.%facet_value.71a]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound.loc24_39: <bound method> = bound_method %.loc24_39.2, constants.%DestroyT.as_type.as.Destroy.impl.Op.f1a
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.f1a, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.71a) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.578]
// CHECK:STDOUT: %bound_method.loc24_39: <bound method> = bound_method %.loc24_39.2, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc24_39: <bound method> = bound_method %.loc24_39.2, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.aa7
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.aa7, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.71a) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.300]
// CHECK:STDOUT: %bound_method.loc24_39: <bound method> = bound_method %.loc24_39.2, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %addr.loc24_39: %ptr.ad9 = addr_of %.loc24_39.2
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc24_39: init %empty_tuple.type = call %bound_method.loc24_39(%addr.loc24_39)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc24_39: init %empty_tuple.type = call %bound_method.loc24_39(%addr.loc24_39)
// CHECK:STDOUT: %facet_value.loc24_38: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %.loc24_38.7: %type_where = converted constants.%Z, %facet_value.loc24_38 [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound.loc24_38: <bound method> = bound_method %.loc24_38.4, constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.e7d]
// CHECK:STDOUT: %bound_method.loc24_38: <bound method> = bound_method %.loc24_38.4, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound.loc24_38: <bound method> = bound_method %.loc24_38.4, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.2: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.97f]
// CHECK:STDOUT: %bound_method.loc24_38: <bound method> = bound_method %.loc24_38.4, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.2
// CHECK:STDOUT: %addr.loc24_38: %ptr.fb6 = addr_of %.loc24_38.4
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc24_38: init %empty_tuple.type = call %bound_method.loc24_38(%addr.loc24_38)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc24_38: init %empty_tuple.type = call %bound_method.loc24_38(%addr.loc24_38)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -1073,57 +1073,57 @@ fn CallIndirect() {
// CHECK:STDOUT: %T.loc27_16.1: %A.type.0a4 = bind_symbolic_name T, 0 [symbolic = %T.loc27_16.1 (constants.%T.7bf)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc28_4.2: type = facet_access_type %T.loc27_16.1 [symbolic = %T.as_type.loc28_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc27_16.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %A.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc27_16.1, @A, @A(constants.%X) [symbolic = %A.lookup_impl_witness (constants.%A.lookup_impl_witness)]
// CHECK:STDOUT: %.loc28_4.3: type = fn_type_with_self_type constants.%A.F.type.13d, %T.loc27_16.1 [symbolic = %.loc28_4.3 (constants.%.0c6)]
// CHECK:STDOUT: %impl.elem0.loc28_4.2: @CallGeneric.%.loc28_4.3 (%.0c6) = impl_witness_access %A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc28_4.2: <specific function> = specific_impl_function %impl.elem0.loc28_4.2, @A.F(constants.%X, %T.loc27_16.1, constants.%Z) [symbolic = %specific_impl_fn.loc28_4.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT: %tuple.type: type = tuple_type (constants.%X, %T.as_type.loc28_4.2, constants.%Z) [symbolic = %tuple.type (constants.%tuple.type.780)]
// CHECK:STDOUT: %require_complete.loc28_12.1: <witness> = require_complete_type %tuple.type [symbolic = %require_complete.loc28_12.1 (constants.%require_complete.4ef)]
// CHECK:STDOUT: %facet_value.loc28_12.2: %type_where = facet_value %tuple.type, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.52b)]
// CHECK:STDOUT: %Destroy.impl_witness: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.aa0)]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %tuple.type, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.324)]
// CHECK:STDOUT: %.loc28_12.5: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc28_12.5 (constants.%.a30)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type: type = fn_type @DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.type (constants.%DestroyT.as_type.as.Destroy.impl.Op.type.7cc)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op: @CallGeneric.%DestroyT.as_type.as.Destroy.impl.Op.type (%DestroyT.as_type.as.Destroy.impl.Op.type.7cc) = struct_value () [symbolic = %DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.24b)]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28: <specific function> = specific_function %DestroyT.as_type.as.Destroy.impl.Op, @DestroyT.as_type.as.Destroy.impl.Op(%facet_value.loc28_12.2) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2bf)]
// CHECK:STDOUT: %ptr: type = ptr_type %tuple.type [symbolic = %ptr (constants.%ptr.563)]
// CHECK:STDOUT: %require_complete.loc28_12.2: <witness> = require_complete_type %ptr [symbolic = %require_complete.loc28_12.2 (constants.%require_complete.147)]
// CHECK:STDOUT: %tuple.type: type = tuple_type (constants.%X, %T.binding.as_type, constants.%Z) [symbolic = %tuple.type (constants.%tuple.type.16c)]
// CHECK:STDOUT: %require_complete.loc28_12.1: <witness> = require_complete_type %tuple.type [symbolic = %require_complete.loc28_12.1 (constants.%require_complete.788)]
// CHECK:STDOUT: %facet_value.loc28_12.2: %type_where = facet_value %tuple.type, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.237)]
// CHECK:STDOUT: %Destroy.impl_witness: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.6de)]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %tuple.type, (%Destroy.impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet.837)]
// CHECK:STDOUT: %.loc28_12.5: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc28_12.5 (constants.%.a5a)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type: type = fn_type @DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value.loc28_12.2) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.type (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.type.b35)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op: @CallGeneric.%DestroyT.binding.as_type.as.Destroy.impl.Op.type (%DestroyT.binding.as_type.as.Destroy.impl.Op.type.b35) = struct_value () [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.cae)]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28: <specific function> = specific_function %DestroyT.binding.as_type.as.Destroy.impl.Op, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value.loc28_12.2) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.d49)]
// CHECK:STDOUT: %ptr: type = ptr_type %tuple.type [symbolic = %ptr (constants.%ptr.784)]
// CHECK:STDOUT: %require_complete.loc28_12.2: <witness> = require_complete_type %ptr [symbolic = %require_complete.loc28_12.2 (constants.%require_complete.8be)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %T.ref: %A.type.0a4 = name_ref T, %T.loc27_16.2 [symbolic = %T.loc27_16.1 (constants.%T.7bf)]
// CHECK:STDOUT: %.loc28_4.1: %A.assoc_type.296 = specific_constant @A.%assoc0.loc6_39.1, @A(constants.%X) [concrete = constants.%assoc0.5f6]
// CHECK:STDOUT: %F.ref: %A.assoc_type.296 = name_ref F, %.loc28_4.1 [concrete = constants.%assoc0.5f6]
// CHECK:STDOUT: %T.as_type.loc28_4.1: type = facet_access_type %T.ref [symbolic = %T.as_type.loc28_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %.loc28_4.2: type = converted %T.ref, %T.as_type.loc28_4.1 [symbolic = %T.as_type.loc28_4.2 (constants.%T.as_type)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %.loc28_4.2: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type)]
// CHECK:STDOUT: %impl.elem0.loc28_4.1: @CallGeneric.%.loc28_4.3 (%.0c6) = impl_witness_access constants.%A.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc28_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %Z.ref: type = name_ref Z, file.%Z.decl [concrete = constants.%Z]
// CHECK:STDOUT: %.loc28_11.1: %empty_struct_type = struct_literal ()
// CHECK:STDOUT: %specific_impl_fn.loc28_4.1: <specific function> = specific_impl_function %impl.elem0.loc28_4.1, @A.F(constants.%X, constants.%T.7bf, constants.%Z) [symbolic = %specific_impl_fn.loc28_4.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT: %.loc28_12.1: ref @CallGeneric.%tuple.type (%tuple.type.780) = temporary_storage
// CHECK:STDOUT: %.loc28_12.1: ref @CallGeneric.%tuple.type (%tuple.type.16c) = temporary_storage
// CHECK:STDOUT: %.loc28_11.2: ref %Z = temporary_storage
// CHECK:STDOUT: %.loc28_11.3: init %Z = class_init (), %.loc28_11.2 [concrete = constants.%Z.val]
// CHECK:STDOUT: %.loc28_11.4: ref %Z = temporary %.loc28_11.2, %.loc28_11.3
// CHECK:STDOUT: %.loc28_11.5: ref %Z = converted %.loc28_11.1, %.loc28_11.4
// CHECK:STDOUT: %.loc28_11.6: %Z = bind_value %.loc28_11.5
// CHECK:STDOUT: %.loc28_12.2: init @CallGeneric.%tuple.type (%tuple.type.780) = call %specific_impl_fn.loc28_4.1(%.loc28_11.6) to %.loc28_12.1
// CHECK:STDOUT: %.loc28_12.3: ref @CallGeneric.%tuple.type (%tuple.type.780) = temporary %.loc28_12.1, %.loc28_12.2
// CHECK:STDOUT: %facet_value.loc28_12.1: %type_where = facet_value constants.%tuple.type.780, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.52b)]
// CHECK:STDOUT: %.loc28_12.4: %type_where = converted constants.%tuple.type.780, %facet_value.loc28_12.1 [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.52b)]
// CHECK:STDOUT: %impl.elem0.loc28_12: @CallGeneric.%.loc28_12.5 (%.a30) = impl_witness_access constants.%Destroy.impl_witness.aa0, element0 [symbolic = %DestroyT.as_type.as.Destroy.impl.Op (constants.%DestroyT.as_type.as.Destroy.impl.Op.24b)]
// CHECK:STDOUT: %.loc28_12.2: init @CallGeneric.%tuple.type (%tuple.type.16c) = call %specific_impl_fn.loc28_4.1(%.loc28_11.6) to %.loc28_12.1
// CHECK:STDOUT: %.loc28_12.3: ref @CallGeneric.%tuple.type (%tuple.type.16c) = temporary %.loc28_12.1, %.loc28_12.2
// CHECK:STDOUT: %facet_value.loc28_12.1: %type_where = facet_value constants.%tuple.type.16c, () [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.237)]
// CHECK:STDOUT: %.loc28_12.4: %type_where = converted constants.%tuple.type.16c, %facet_value.loc28_12.1 [symbolic = %facet_value.loc28_12.2 (constants.%facet_value.237)]
// CHECK:STDOUT: %impl.elem0.loc28_12: @CallGeneric.%.loc28_12.5 (%.a5a) = impl_witness_access constants.%Destroy.impl_witness.6de, element0 [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.cae)]
// CHECK:STDOUT: %bound_method.loc28_12.1: <bound method> = bound_method %.loc28_12.3, %impl.elem0.loc28_12
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0.loc28_12, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.52b) [symbolic = %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.2bf)]
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0.loc28_12, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.237) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28 (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.d49)]
// CHECK:STDOUT: %bound_method.loc28_12.2: <bound method> = bound_method %.loc28_12.3, %specific_fn
// CHECK:STDOUT: %addr.loc28_12: @CallGeneric.%ptr (%ptr.563) = addr_of %.loc28_12.3
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc28_12: init %empty_tuple.type = call %bound_method.loc28_12.2(%addr.loc28_12)
// CHECK:STDOUT: %addr.loc28_12: @CallGeneric.%ptr (%ptr.784) = addr_of %.loc28_12.3
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc28_12: init %empty_tuple.type = call %bound_method.loc28_12.2(%addr.loc28_12)
// CHECK:STDOUT: %facet_value.loc28_11: %type_where = facet_value constants.%Z, () [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %.loc28_11.7: %type_where = converted constants.%Z, %facet_value.loc28_11 [concrete = constants.%facet_value.4e3]
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.bound: <bound method> = bound_method %.loc28_11.4, constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.as_type.as.Destroy.impl.Op.dd5, @DestroyT.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.e7d]
// CHECK:STDOUT: %bound_method.loc28_11: <bound method> = bound_method %.loc28_11.4, %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.bound: <bound method> = bound_method %.loc28_11.4, constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1: <specific function> = specific_function constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.8e8, @DestroyT.binding.as_type.as.Destroy.impl.Op(constants.%facet_value.4e3) [concrete = constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.97f]
// CHECK:STDOUT: %bound_method.loc28_11: <bound method> = bound_method %.loc28_11.4, %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.1
// CHECK:STDOUT: %addr.loc28_11: %ptr.fb6 = addr_of %.loc28_11.4
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.call.loc28_11: init %empty_tuple.type = call %bound_method.loc28_11(%addr.loc28_11)
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.call.loc28_11: init %empty_tuple.type = call %bound_method.loc28_11(%addr.loc28_11)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
@@ -1153,9 +1153,9 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.d88
// CHECK:STDOUT: %Self => constants.%Self.c6b
// CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.098
// CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%Self.as_type.707
// CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.325
// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.491
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.0eb
// CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.253
// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.bca
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @A(constants.%W) {
@@ -1209,7 +1209,7 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.ff4
// CHECK:STDOUT: %Self => constants.%A.facet.452
// CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.42f
// CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%tuple.type.30b
// CHECK:STDOUT: %Self.binding.as_type => constants.%tuple.type.30b
// CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.8ae
// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.d4a
// CHECK:STDOUT: }
@@ -1269,16 +1269,16 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.0a4
// CHECK:STDOUT: %Self => constants.%T.7bf
// CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.5a1
// CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%T.as_type
// CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.780
// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.f87
// CHECK:STDOUT: %Self.binding.as_type => constants.%T.binding.as_type
// CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.16c
// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.c32
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @CallGeneric(constants.%A.facet.cdd) {
// CHECK:STDOUT: %T.loc27_16.1 => constants.%A.facet.cdd
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.as_type.loc28_4.2 => constants.%tuple.type.a46
// CHECK:STDOUT: %T.binding.as_type => constants.%tuple.type.a46
// CHECK:STDOUT: %A.lookup_impl_witness => constants.%A.impl_witness.c8b
// CHECK:STDOUT: %.loc28_4.3 => constants.%.9b3
// CHECK:STDOUT: %impl.elem0.loc28_4.2 => constants.%tuple.type.as.A.impl.F.e39
@@ -1286,12 +1286,12 @@ fn CallIndirect() {
// CHECK:STDOUT: %tuple.type => constants.%tuple.type.415
// CHECK:STDOUT: %require_complete.loc28_12.1 => constants.%complete_type.aa8
// CHECK:STDOUT: %facet_value.loc28_12.2 => constants.%facet_value.71a
// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.37a
// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.684
// CHECK:STDOUT: %.loc28_12.5 => constants.%.27f
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.type => constants.%DestroyT.as_type.as.Destroy.impl.Op.type.d92
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op => constants.%DestroyT.as_type.as.Destroy.impl.Op.f1a
// CHECK:STDOUT: %DestroyT.as_type.as.Destroy.impl.Op.specific_fn.loc28 => constants.%DestroyT.as_type.as.Destroy.impl.Op.specific_fn.578
// CHECK:STDOUT: %Destroy.impl_witness => constants.%Destroy.impl_witness.5ea
// CHECK:STDOUT: %Destroy.facet => constants.%Destroy.facet.ec3
// CHECK:STDOUT: %.loc28_12.5 => constants.%.e92
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type => constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.type.6ef
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op => constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.aa7
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.loc28 => constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn.300
// CHECK:STDOUT: %ptr => constants.%ptr.ad9
// CHECK:STDOUT: %require_complete.loc28_12.2 => constants.%complete_type.e23
// CHECK:STDOUT: }
@@ -1303,7 +1303,7 @@ fn CallIndirect() {
// CHECK:STDOUT: %A.type => constants.%A.type.0a4
// CHECK:STDOUT: %Self => constants.%A.facet.cdd
// CHECK:STDOUT: %tuple.type.loc6_38.1 => constants.%tuple.type.5a1
// CHECK:STDOUT: %Self.as_type.loc6_38.1 => constants.%tuple.type.a46
// CHECK:STDOUT: %Self.binding.as_type => constants.%tuple.type.a46
// CHECK:STDOUT: %tuple.type.loc6_38.2 => constants.%tuple.type.415
// CHECK:STDOUT: %pattern_type.loc6_24 => constants.%pattern_type.0b2
// CHECK:STDOUT: }
+15 -15
View File
@@ -30,8 +30,8 @@ fn F() {
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type.768: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.7db: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %I.G.type: type = fn_type @I.G [concrete]
// CHECK:STDOUT: %I.G: %I.G.type = struct_value () [concrete]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
@@ -55,16 +55,16 @@ fn F() {
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %I.G.decl: %I.G.type = fn_decl @I.G [concrete = constants.%I.G] {
// CHECK:STDOUT: %self.patt: @I.G.%pattern_type (%pattern_type.768) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.G.%pattern_type (%pattern_type.768) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @I.G.%pattern_type (%pattern_type.7db) = binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.G.%pattern_type (%pattern_type.7db) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @I.G.%Self.as_type.loc17_16.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc17_16.1: type = splice_block %.loc17_16.2 [symbolic = %Self.as_type.loc17_16.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %self.param: @I.G.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc17_16.1: type = splice_block %.loc17_16.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc17_16.2: type = facet_access_type %Self.ref [symbolic = %Self.as_type.loc17_16.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc17_16.2: type = converted %Self.ref, %Self.as_type.loc17_16.2 [symbolic = %Self.as_type.loc17_16.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc17_16.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @I.G.%Self.as_type.loc17_16.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %self: @I.G.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.G.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -112,10 +112,10 @@ fn F() {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @I.G(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc17_16.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc17_16.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc17_16.1 [symbolic = %pattern_type (constants.%pattern_type.768)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.7db)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.G.%Self.as_type.loc17_16.1 (%Self.as_type));
// CHECK:STDOUT: fn(%self.param: @I.G.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @empty_tuple.type.as.I.impl.G(%self.param: %empty_tuple.type) {
@@ -125,13 +125,13 @@ fn F() {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.G(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc17_16.1 => constants.%Self.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.768
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7db
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.G(constants.%I.facet) {
// CHECK:STDOUT: %Self => constants.%I.facet
// CHECK:STDOUT: %Self.as_type.loc17_16.1 => constants.%empty_tuple.type
// CHECK:STDOUT: %Self.binding.as_type => constants.%empty_tuple.type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.cb1
// CHECK:STDOUT: }
// CHECK:STDOUT:
+8 -8
View File
@@ -73,7 +73,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %AccessGeneric.type: type = fn_type @AccessGeneric [concrete]
// CHECK:STDOUT: %AccessGeneric: %AccessGeneric.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.a60: <witness> = require_complete_type %Interface.type.cc2 [symbolic]
// CHECK:STDOUT: %I.as_type.021: type = facet_access_type %I.01f [symbolic]
// CHECK:STDOUT: %I.binding.as_type.c56: type = symbolic_binding_type I, 1, %I.01f [symbolic]
// CHECK:STDOUT: %Interface.lookup_impl_witness.387: <witness> = lookup_impl_witness %I.01f, @Interface, @Interface(%T.8b3) [symbolic]
// CHECK:STDOUT: %impl.elem0.97f: %ptr.79f = impl_witness_access %Interface.lookup_impl_witness.387, element0 [symbolic]
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
@@ -101,7 +101,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %Self.c67: %Interface.type.02f = bind_symbolic_name Self, 1 [symbolic]
// CHECK:STDOUT: %Interface.assoc_type.aaa: type = assoc_entity_type @Interface, @Interface(%i32) [concrete]
// CHECK:STDOUT: %assoc0.04e: %Interface.assoc_type.aaa = assoc_entity element0, @Interface.%X [concrete]
// CHECK:STDOUT: %I.as_type.48f: type = facet_access_type %I.328 [symbolic]
// CHECK:STDOUT: %I.binding.as_type.bb1: type = symbolic_binding_type I, 0, %I.328 [symbolic]
// CHECK:STDOUT: %Interface.lookup_impl_witness.252: <witness> = lookup_impl_witness %I.328, @Interface, @Interface(%i32) [symbolic]
// CHECK:STDOUT: %complete_type.3d0: <witness> = complete_type_witness %ptr.235 [concrete]
// CHECK:STDOUT: %impl.elem0.031: %ptr.235 = impl_witness_access %Interface.lookup_impl_witness.252, element0 [symbolic]
@@ -226,7 +226,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %require_complete.loc9_10: <witness> = require_complete_type %Interface.type.loc8_43.1 [symbolic = %require_complete.loc9_10 (constants.%require_complete.a60)]
// CHECK:STDOUT: %Interface.assoc_type: type = assoc_entity_type @Interface, @Interface(%T.loc8_18.1) [symbolic = %Interface.assoc_type (constants.%Interface.assoc_type.0d9)]
// CHECK:STDOUT: %assoc0: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.0d9) = assoc_entity element0, @Interface.%X [symbolic = %assoc0 (constants.%assoc0.7e7)]
// CHECK:STDOUT: %I.as_type.loc9_11.2: type = facet_access_type %I.loc8_28.1 [symbolic = %I.as_type.loc9_11.2 (constants.%I.as_type.021)]
// CHECK:STDOUT: %I.binding.as_type: type = symbolic_binding_type I, 1, %I.loc8_28.1 [symbolic = %I.binding.as_type (constants.%I.binding.as_type.c56)]
// CHECK:STDOUT: %Interface.lookup_impl_witness: <witness> = lookup_impl_witness %I.loc8_28.1, @Interface, @Interface(%T.loc8_18.1) [symbolic = %Interface.lookup_impl_witness (constants.%Interface.lookup_impl_witness.387)]
// CHECK:STDOUT: %impl.elem0.loc9_11.3: @AccessGeneric.%ptr.loc8_50.1 (%ptr.79f) = impl_witness_access %Interface.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_11.3 (constants.%impl.elem0.97f)]
// CHECK:STDOUT: %require_complete.loc9_13: <witness> = require_complete_type %ptr.loc8_50.1 [symbolic = %require_complete.loc9_13 (constants.%require_complete.6e5)]
@@ -243,8 +243,8 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %I.ref: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.cc2) = name_ref I, %I.loc8_28.2 [symbolic = %I.loc8_28.1 (constants.%I.01f)]
// CHECK:STDOUT: %.loc9_11.1: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.0d9) = specific_constant @X.%assoc0, @Interface(constants.%T.8b3) [symbolic = %assoc0 (constants.%assoc0.7e7)]
// CHECK:STDOUT: %X.ref: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.0d9) = name_ref X, %.loc9_11.1 [symbolic = %assoc0 (constants.%assoc0.7e7)]
// CHECK:STDOUT: %I.as_type.loc9_11.1: type = facet_access_type %I.ref [symbolic = %I.as_type.loc9_11.2 (constants.%I.as_type.021)]
// CHECK:STDOUT: %.loc9_11.2: type = converted %I.ref, %I.as_type.loc9_11.1 [symbolic = %I.as_type.loc9_11.2 (constants.%I.as_type.021)]
// CHECK:STDOUT: %I.as_type: type = facet_access_type %I.ref [symbolic = %I.binding.as_type (constants.%I.binding.as_type.c56)]
// CHECK:STDOUT: %.loc9_11.2: type = converted %I.ref, %I.as_type [symbolic = %I.binding.as_type (constants.%I.binding.as_type.c56)]
// CHECK:STDOUT: %impl.elem0.loc9_11.1: @AccessGeneric.%ptr.loc8_50.1 (%ptr.79f) = impl_witness_access constants.%Interface.lookup_impl_witness.387, element0 [symbolic = %impl.elem0.loc9_11.3 (constants.%impl.elem0.97f)]
// CHECK:STDOUT: %impl.elem0.loc9_11.2: @AccessGeneric.%.loc9_11.4 (%.1cc) = impl_witness_access constants.%Copy.lookup_impl_witness.cb2, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.751)]
// CHECK:STDOUT: %bound_method.loc9_11.1: <bound method> = bound_method %impl.elem0.loc9_11.1, %impl.elem0.loc9_11.2 [symbolic = %bound_method.loc9_11.3 (constants.%bound_method.2cd)]
@@ -259,7 +259,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %I.loc12_19.1: %Interface.type.02f = bind_symbolic_name I, 0 [symbolic = %I.loc12_19.1 (constants.%I.328)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %I.as_type.loc13_11.2: type = facet_access_type %I.loc12_19.1 [symbolic = %I.as_type.loc13_11.2 (constants.%I.as_type.48f)]
// CHECK:STDOUT: %I.binding.as_type: type = symbolic_binding_type I, 0, %I.loc12_19.1 [symbolic = %I.binding.as_type (constants.%I.binding.as_type.bb1)]
// CHECK:STDOUT: %Interface.lookup_impl_witness: <witness> = lookup_impl_witness %I.loc12_19.1, @Interface, @Interface(constants.%i32) [symbolic = %Interface.lookup_impl_witness (constants.%Interface.lookup_impl_witness.252)]
// CHECK:STDOUT: %impl.elem0.loc13_11.3: %ptr.235 = impl_witness_access %Interface.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc13_11.3 (constants.%impl.elem0.031)]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: <bound method> = bound_method %impl.elem0.loc13_11.3, constants.%ptr.as.Copy.impl.Op.9fb [symbolic = %ptr.as.Copy.impl.Op.bound (constants.%ptr.as.Copy.impl.Op.bound)]
@@ -270,8 +270,8 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %I.ref: %Interface.type.02f = name_ref I, %I.loc12_19.2 [symbolic = %I.loc12_19.1 (constants.%I.328)]
// CHECK:STDOUT: %.loc13_11.1: %Interface.assoc_type.aaa = specific_constant @X.%assoc0, @Interface(constants.%i32) [concrete = constants.%assoc0.04e]
// CHECK:STDOUT: %X.ref: %Interface.assoc_type.aaa = name_ref X, %.loc13_11.1 [concrete = constants.%assoc0.04e]
// CHECK:STDOUT: %I.as_type.loc13_11.1: type = facet_access_type %I.ref [symbolic = %I.as_type.loc13_11.2 (constants.%I.as_type.48f)]
// CHECK:STDOUT: %.loc13_11.2: type = converted %I.ref, %I.as_type.loc13_11.1 [symbolic = %I.as_type.loc13_11.2 (constants.%I.as_type.48f)]
// CHECK:STDOUT: %I.as_type: type = facet_access_type %I.ref [symbolic = %I.binding.as_type (constants.%I.binding.as_type.bb1)]
// CHECK:STDOUT: %.loc13_11.2: type = converted %I.ref, %I.as_type [symbolic = %I.binding.as_type (constants.%I.binding.as_type.bb1)]
// CHECK:STDOUT: %impl.elem0.loc13_11.1: %ptr.235 = impl_witness_access constants.%Interface.lookup_impl_witness.252, element0 [symbolic = %impl.elem0.loc13_11.3 (constants.%impl.elem0.031)]
// CHECK:STDOUT: %impl.elem0.loc13_11.2: %.9e2 = impl_witness_access constants.%Copy.impl_witness.a93, element0 [concrete = constants.%ptr.as.Copy.impl.Op.9fb]
// CHECK:STDOUT: %bound_method.loc13_11.1: <bound method> = bound_method %impl.elem0.loc13_11.1, %impl.elem0.loc13_11.2 [symbolic = %ptr.as.Copy.impl.Op.bound (constants.%ptr.as.Copy.impl.Op.bound)]
+15 -15
View File
@@ -21,8 +21,8 @@ interface UseSelf {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %UseSelf.type: type = facet_type <@UseSelf> [concrete]
// CHECK:STDOUT: %Self: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %UseSelf.F.type: type = fn_type @UseSelf.F [concrete]
// CHECK:STDOUT: %UseSelf.F: %UseSelf.F.type = struct_value () [concrete]
// CHECK:STDOUT: %UseSelf.assoc_type: type = assoc_entity_type @UseSelf [concrete]
@@ -45,17 +45,17 @@ interface UseSelf {
// CHECK:STDOUT: %return.param_patt: @UseSelf.F.%pattern_type (%pattern_type) = out_param_pattern %return.patt, call_param1 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref.loc16_25: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc16_25: type = facet_access_type %Self.ref.loc16_25 [symbolic = %Self.as_type.loc16_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc16_25: type = converted %Self.ref.loc16_25, %Self.as_type.loc16_25 [symbolic = %Self.as_type.loc16_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %self.param: @UseSelf.F.%Self.as_type.loc16_14.1 (%Self.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc16_14.1: type = splice_block %.loc16_14.2 [symbolic = %Self.as_type.loc16_14.1 (constants.%Self.as_type)] {
// CHECK:STDOUT: %Self.as_type.loc16_25: type = facet_access_type %Self.ref.loc16_25 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc16_25: type = converted %Self.ref.loc16_25, %Self.as_type.loc16_25 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %self.param: @UseSelf.F.%Self.binding.as_type (%Self.binding.as_type) = value_param call_param0
// CHECK:STDOUT: %.loc16_14.1: type = splice_block %.loc16_14.2 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)] {
// CHECK:STDOUT: %Self.ref.loc16_14: %UseSelf.type = name_ref Self, @UseSelf.%Self [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc16_14.2: type = facet_access_type %Self.ref.loc16_14 [symbolic = %Self.as_type.loc16_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %.loc16_14.2: type = converted %Self.ref.loc16_14, %Self.as_type.loc16_14.2 [symbolic = %Self.as_type.loc16_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %Self.as_type.loc16_14: type = facet_access_type %Self.ref.loc16_14 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc16_14.2: type = converted %Self.ref.loc16_14, %Self.as_type.loc16_14 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @UseSelf.F.%Self.as_type.loc16_14.1 (%Self.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: ref @UseSelf.F.%Self.as_type.loc16_14.1 (%Self.as_type) = out_param call_param1
// CHECK:STDOUT: %return: ref @UseSelf.F.%Self.as_type.loc16_14.1 (%Self.as_type) = return_slot %return.param
// CHECK:STDOUT: %self: @UseSelf.F.%Self.binding.as_type (%Self.binding.as_type) = bind_name self, %self.param
// CHECK:STDOUT: %return.param: ref @UseSelf.F.%Self.binding.as_type (%Self.binding.as_type) = out_param call_param1
// CHECK:STDOUT: %return: ref @UseSelf.F.%Self.binding.as_type (%Self.binding.as_type) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %UseSelf.assoc_type = assoc_entity element0, %UseSelf.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -67,15 +67,15 @@ interface UseSelf {
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @UseSelf.F(@UseSelf.%Self: %UseSelf.type) {
// CHECK:STDOUT: %Self: %UseSelf.type = bind_symbolic_name Self, 0 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type.loc16_14.1: type = facet_access_type %Self [symbolic = %Self.as_type.loc16_14.1 (constants.%Self.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.as_type.loc16_14.1 [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @UseSelf.F.%Self.as_type.loc16_14.1 (%Self.as_type)) -> @UseSelf.F.%Self.as_type.loc16_14.1 (%Self.as_type);
// CHECK:STDOUT: fn(%self.param: @UseSelf.F.%Self.binding.as_type (%Self.binding.as_type)) -> @UseSelf.F.%Self.binding.as_type (%Self.binding.as_type);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @UseSelf.F(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.as_type.loc16_14.1 => constants.%Self.as_type
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type
// CHECK:STDOUT: }
// CHECK:STDOUT: