Change Destroy to use a CustomWitness instead of a blanket impl (#6512)

Pursuant to recent decisions on #6124, switch `Destroy` to use a
`CustomWitness` for its implementation. Right now this is manufacturing
no-op implementation functions on each lookup, which obviously isn't
ideal but is intended as a first pass. I'm mostly trying to find the
right balance between updating the approach to reflect new decisions,
while still breaking apart work in a way.

The `CoreInterface` logic is intended to build on `CoreIdentifier`
support. We have a number of additional interfaces that require
specialized logic, and that'll extend pretty far with C++ interop, so it
seemed easiest to have a generic function for it. That's what's
replacing the logic inside C++ interop that was doing string comparisons
(which could have already been moved to `CoreIdentifier`, I just missed
it in my first pass).

This adds `CustomWitness` support because the `Destroy` witnesses can be
imported cross-file. `CustomWitness` was previously only used for C++
types, which don't yet support import, which is why that wasn't
previously an issue. The addition of `query_specific_interface_id` is
similarly needed in order to get correct sorting of witness blocks when
imported.

This PR also removes builtin constraint logic (note this is in a
separate commit to help review; it's not a separate PR because it's
difficult to split apart without tests breaking). This had been made
generic with the expectation that destroy, copy, move, and conversions
would all need related support. Under the new decision, we are not going
to do blanket impls and will instead just manufacture a `CustomWitness`
for everything.

A lot of SemIR fingerprints change, but that's probably because the
addition of `Destroy` on core classes is yielding structural changes.
This commit is contained in:
Jon Ross-Perkins
2025-12-19 18:36:06 +00:00
committed by GitHub
parent 1f0a3dcf37
commit c5eba90317
445 changed files with 22297 additions and 23686 deletions
+21 -37
View File
@@ -26,7 +26,7 @@ fn F(T:! Empty) {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete]
// CHECK:STDOUT: %Self.6cb: %Empty.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.61e: %Empty.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
@@ -34,28 +34,21 @@ fn F(T:! Empty) {
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %T: %Empty.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.917: type = pattern_type %Empty.type [concrete]
// CHECK:STDOUT: %pattern_type.7d1: type = pattern_type %Empty.type [concrete]
// 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.binding.as_type: type = symbolic_binding_type T, 0, %T [symbolic]
// CHECK:STDOUT: %ptr: type = ptr_type %T.binding.as_type [symbolic]
// CHECK:STDOUT: %require_complete.63d: <witness> = require_complete_type %ptr [symbolic]
// CHECK:STDOUT: %pattern_type.d1c: type = pattern_type %ptr [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr [symbolic]
// CHECK:STDOUT: %pattern_type.fd9: type = pattern_type %ptr [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 = symbolic_binding DestroyT, 0 [symbolic]
// CHECK:STDOUT: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.0bf: 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.97a: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.0bf = struct_value () [symbolic]
// CHECK:STDOUT: %facet_value: %type_where = facet_value %ptr, () [symbolic]
// CHECK:STDOUT: %Destroy.impl_witness.15e: <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.4f9: 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.e21: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.4f9 = struct_value () [symbolic]
// CHECK:STDOUT: %.93f: require_specific_def_type = require_specific_def @DestroyT.binding.as_type.as.Destroy.impl(%facet_value) [symbolic]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr, (%Destroy.impl_witness.15e) [symbolic]
// CHECK:STDOUT: %.311: 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.e21, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value) [symbolic]
// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete]
// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete]
// CHECK:STDOUT: %custom_witness.809: <witness> = custom_witness (%DestroyOp), @Destroy [concrete]
// CHECK:STDOUT: %Destroy.facet.24f: %Destroy.type = facet_value %ptr, (%custom_witness.809) [symbolic]
// CHECK:STDOUT: %.732: type = fn_type_with_self_type %Destroy.Op.type, %Destroy.facet.24f [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -65,8 +58,6 @@ 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.93a: @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.0bf) = 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.97a)]
// CHECK:STDOUT: %Destroy.impl_witness_table = impl_witness_table (%Core.import_ref.93a), @DestroyT.binding.as_type.as.Destroy.impl [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -84,7 +75,7 @@ fn F(T:! Empty) {
// CHECK:STDOUT: %Empty.ref: type = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %T.patt: %pattern_type.917 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.7d1 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc21: type = splice_block %Empty.ref [concrete = constants.%Empty.type] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
@@ -95,7 +86,7 @@ fn F(T:! Empty) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Empty {
// CHECK:STDOUT: %Self: %Empty.type = symbolic_binding Self, 0 [symbolic = constants.%Self.6cb]
// CHECK:STDOUT: %Self: %Empty.type = symbolic_binding Self, 0 [symbolic = constants.%Self.61e]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -126,22 +117,16 @@ fn F(T:! Empty) {
// CHECK:STDOUT: !definition:
// 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)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc22_11.2 [symbolic = %require_complete (constants.%require_complete.63d)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc22_11.2 [symbolic = %pattern_type (constants.%pattern_type.d1c)]
// CHECK:STDOUT: %facet_value: %type_where = facet_value %ptr.loc22_11.2, () [symbolic = %facet_value (constants.%facet_value)]
// CHECK:STDOUT: %.loc22_3.1: require_specific_def_type = require_specific_def @DestroyT.binding.as_type.as.Destroy.impl(%facet_value) [symbolic = %.loc22_3.1 (constants.%.93f)]
// CHECK:STDOUT: %Destroy.impl_witness: <witness> = impl_witness imports.%Destroy.impl_witness_table, @DestroyT.binding.as_type.as.Destroy.impl(%facet_value) [symbolic = %Destroy.impl_witness (constants.%Destroy.impl_witness.15e)]
// 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.%.311)]
// 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) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.type (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.type.4f9)]
// 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.4f9) = struct_value () [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.e21)]
// 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) [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.specific_fn)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr.loc22_11.2 [symbolic = %require_complete (constants.%require_complete)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.loc22_11.2 [symbolic = %pattern_type (constants.%pattern_type.fd9)]
// CHECK:STDOUT: %Destroy.facet: %Destroy.type = facet_value %ptr.loc22_11.2, (constants.%custom_witness.809) [symbolic = %Destroy.facet (constants.%Destroy.facet.24f)]
// CHECK:STDOUT: %.loc22_3: type = fn_type_with_self_type constants.%Destroy.Op.type, %Destroy.facet [symbolic = %.loc22_3 (constants.%.732)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.d1c) = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: @F.%pattern_type (%pattern_type.d1c) = var_pattern %x.patt [concrete]
// CHECK:STDOUT: %x.patt: @F.%pattern_type (%pattern_type.fd9) = ref_binding_pattern x [concrete]
// CHECK:STDOUT: %x.var_patt: @F.%pattern_type (%pattern_type.fd9) = var_pattern %x.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x.var: ref @F.%ptr.loc22_11.2 (%ptr) = var %x.var_patt
// CHECK:STDOUT: %.loc22_11.1: type = splice_block %ptr.loc22_11.1 [symbolic = %ptr.loc22_11.2 (constants.%ptr)] {
@@ -151,15 +136,14 @@ fn F(T:! Empty) {
// CHECK:STDOUT: %ptr.loc22_11.1: type = ptr_type %.loc22_11.2 [symbolic = %ptr.loc22_11.2 (constants.%ptr)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %x: ref @F.%ptr.loc22_11.2 (%ptr) = ref_binding x, %x.var
// CHECK:STDOUT: %impl.elem0: @F.%.loc22_3.2 (%.311) = impl_witness_access constants.%Destroy.impl_witness.15e, element0 [symbolic = %DestroyT.binding.as_type.as.Destroy.impl.Op (constants.%DestroyT.binding.as_type.as.Destroy.impl.Op.e21)]
// 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.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: %DestroyT.binding.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc22_3.2(%x.var)
// CHECK:STDOUT: %DestroyOp.bound: <bound method> = bound_method %x.var, constants.%DestroyOp
// CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%x.var)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: fn @DestroyOp(%self.param: @F.%ptr.loc22_11.2 (%ptr)) = "no_op";
// CHECK:STDOUT:
// CHECK:STDOUT: specific @F(constants.%T) {
// CHECK:STDOUT: %T.loc21_6.1 => constants.%T
// CHECK:STDOUT: }
@@ -37,8 +37,8 @@ fn H() {
// CHECK:STDOUT: %I.type.609: type = generic_interface_type @I [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %I.generic: %I.type.609 = struct_value () [concrete]
// CHECK:STDOUT: %I.type.d71: type = facet_type <@I, @I(%T)> [symbolic]
// CHECK:STDOUT: %Self.bb7: %I.type.d71 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %I.type.1ab: type = facet_type <@I, @I(%T)> [symbolic]
// CHECK:STDOUT: %Self.fdb: %I.type.1ab = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %U: type = symbolic_binding U, 2 [symbolic]
// CHECK:STDOUT: %pattern_type.62e: type = pattern_type %U [symbolic]
// CHECK:STDOUT: %I.F.type.937: type = fn_type @I.F, @I(%T) [symbolic]
@@ -47,20 +47,20 @@ fn H() {
// CHECK:STDOUT: %assoc0.6a6: %I.assoc_type.76c = assoc_entity element0, @I.%I.F.decl [symbolic]
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.073: <witness> = require_complete_type %I.type.d71 [symbolic]
// CHECK:STDOUT: %require_complete.e36: <witness> = require_complete_type %I.type.1ab [symbolic]
// CHECK:STDOUT: %require_complete.ac0: <witness> = require_complete_type %I.assoc_type.76c [symbolic]
// CHECK:STDOUT: %H.type: type = fn_type @H [concrete]
// CHECK:STDOUT: %H: %H.type = struct_value () [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %G.specific_fn: <specific function> = specific_function %G, @G(%empty_struct_type) [concrete]
// CHECK:STDOUT: %I.type.a51: type = facet_type <@I, @I(%empty_struct_type)> [concrete]
// CHECK:STDOUT: %Self.dfb: %I.type.a51 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %I.type.ab5: type = facet_type <@I, @I(%empty_struct_type)> [concrete]
// CHECK:STDOUT: %Self.7ae: %I.type.ab5 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %I.F.type.550: type = fn_type @I.F, @I(%empty_struct_type) [concrete]
// CHECK:STDOUT: %I.F.a1c: %I.F.type.550 = struct_value () [concrete]
// CHECK:STDOUT: %I.assoc_type.294: type = assoc_entity_type @I, @I(%empty_struct_type) [concrete]
// CHECK:STDOUT: %assoc0.130: %I.assoc_type.294 = assoc_entity element0, @I.%I.F.decl [concrete]
// CHECK:STDOUT: %complete_type.f92: <witness> = complete_type_witness %I.type.a51 [concrete]
// CHECK:STDOUT: %complete_type.5b1: <witness> = complete_type_witness %I.type.ab5 [concrete]
// CHECK:STDOUT: %complete_type.7fc: <witness> = complete_type_witness %I.assoc_type.294 [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -89,15 +89,15 @@ fn H() {
// CHECK:STDOUT: %T.loc15_13.1: type = symbolic_binding T, 0 [symbolic = %T.loc15_13.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc15_13.1)> [symbolic = %I.type (constants.%I.type.d71)]
// CHECK:STDOUT: %Self.loc15_23.2: @I.%I.type (%I.type.d71) = symbolic_binding Self, 1 [symbolic = %Self.loc15_23.2 (constants.%Self.bb7)]
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc15_13.1)> [symbolic = %I.type (constants.%I.type.1ab)]
// CHECK:STDOUT: %Self.loc15_23.2: @I.%I.type (%I.type.1ab) = symbolic_binding Self, 1 [symbolic = %Self.loc15_23.2 (constants.%Self.fdb)]
// CHECK:STDOUT: %I.F.type: type = fn_type @I.F, @I(%T.loc15_13.1) [symbolic = %I.F.type (constants.%I.F.type.937)]
// CHECK:STDOUT: %I.F: @I.%I.F.type (%I.F.type.937) = struct_value () [symbolic = %I.F (constants.%I.F.a37)]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I, @I(%T.loc15_13.1) [symbolic = %I.assoc_type (constants.%I.assoc_type.76c)]
// CHECK:STDOUT: %assoc0.loc16_22.2: @I.%I.assoc_type (%I.assoc_type.76c) = assoc_entity element0, %I.F.decl [symbolic = %assoc0.loc16_22.2 (constants.%assoc0.6a6)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc15_23.1: @I.%I.type (%I.type.d71) = symbolic_binding Self, 1 [symbolic = %Self.loc15_23.2 (constants.%Self.bb7)]
// CHECK:STDOUT: %Self.loc15_23.1: @I.%I.type (%I.type.1ab) = symbolic_binding Self, 1 [symbolic = %Self.loc15_23.2 (constants.%Self.fdb)]
// CHECK:STDOUT: %I.F.decl: @I.%I.F.type (%I.F.type.937) = fn_decl @I.F [symbolic = @I.%I.F (constants.%I.F.a37)] {
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 2 [concrete]
// CHECK:STDOUT: %return.patt: @I.F.%pattern_type (%pattern_type.62e) = return_slot_pattern [concrete]
@@ -120,7 +120,7 @@ fn H() {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @I.F(@I.%T.loc15_13.2: type, @I.%Self.loc15_23.1: @I.%I.type (%I.type.d71), %U.loc16_8.2: type) {
// CHECK:STDOUT: generic fn @I.F(@I.%T.loc15_13.2: type, @I.%Self.loc15_23.1: @I.%I.type (%I.type.1ab), %U.loc16_8.2: type) {
// CHECK:STDOUT: %U.loc16_8.1: type = symbolic_binding U, 2 [symbolic = %U.loc16_8.1 (constants.%U)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %U.loc16_8.1 [symbolic = %pattern_type (constants.%pattern_type.62e)]
// CHECK:STDOUT:
@@ -131,8 +131,8 @@ fn H() {
// CHECK:STDOUT: %T.loc19_6.1: type = symbolic_binding T, 0 [symbolic = %T.loc19_6.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %I.type.loc23_6.2: type = facet_type <@I, @I(%T.loc19_6.1)> [symbolic = %I.type.loc23_6.2 (constants.%I.type.d71)]
// CHECK:STDOUT: %require_complete.loc23_7.1: <witness> = require_complete_type %I.type.loc23_6.2 [symbolic = %require_complete.loc23_7.1 (constants.%require_complete.073)]
// CHECK:STDOUT: %I.type.loc23_6.2: type = facet_type <@I, @I(%T.loc19_6.1)> [symbolic = %I.type.loc23_6.2 (constants.%I.type.1ab)]
// CHECK:STDOUT: %require_complete.loc23_7.1: <witness> = require_complete_type %I.type.loc23_6.2 [symbolic = %require_complete.loc23_7.1 (constants.%require_complete.e36)]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I, @I(%T.loc19_6.1) [symbolic = %I.assoc_type (constants.%I.assoc_type.76c)]
// CHECK:STDOUT: %assoc0: @G.%I.assoc_type (%I.assoc_type.76c) = assoc_entity element0, @I.%I.F.decl [symbolic = %assoc0 (constants.%assoc0.6a6)]
// CHECK:STDOUT: %require_complete.loc23_7.2: <witness> = require_complete_type %I.assoc_type [symbolic = %require_complete.loc23_7.2 (constants.%require_complete.ac0)]
@@ -141,7 +141,7 @@ fn H() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %I.ref: %I.type.609 = name_ref I, file.%I.decl [concrete = constants.%I.generic]
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc19_6.2 [symbolic = %T.loc19_6.1 (constants.%T)]
// CHECK:STDOUT: %I.type.loc23_6.1: type = facet_type <@I, @I(constants.%T)> [symbolic = %I.type.loc23_6.2 (constants.%I.type.d71)]
// CHECK:STDOUT: %I.type.loc23_6.1: type = facet_type <@I, @I(constants.%T)> [symbolic = %I.type.loc23_6.2 (constants.%I.type.1ab)]
// CHECK:STDOUT: %.loc23: @G.%I.assoc_type (%I.assoc_type.76c) = specific_constant @I.%assoc0.loc16_22.1, @I(constants.%T) [symbolic = %assoc0 (constants.%assoc0.6a6)]
// CHECK:STDOUT: %F.ref: @G.%I.assoc_type (%I.assoc_type.76c) = name_ref F, %.loc23 [symbolic = %assoc0 (constants.%assoc0.6a6)]
// CHECK:STDOUT: return
@@ -162,15 +162,15 @@ fn H() {
// CHECK:STDOUT: %T.loc15_13.1 => constants.%T
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %I.type => constants.%I.type.d71
// CHECK:STDOUT: %Self.loc15_23.2 => constants.%Self.bb7
// CHECK:STDOUT: %I.type => constants.%I.type.1ab
// CHECK:STDOUT: %Self.loc15_23.2 => constants.%Self.fdb
// CHECK:STDOUT: %I.F.type => constants.%I.F.type.937
// CHECK:STDOUT: %I.F => constants.%I.F.a37
// CHECK:STDOUT: %I.assoc_type => constants.%I.assoc_type.76c
// CHECK:STDOUT: %assoc0.loc16_22.2 => constants.%assoc0.6a6
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%T, constants.%Self.bb7, constants.%U) {
// CHECK:STDOUT: specific @I.F(constants.%T, constants.%Self.fdb, constants.%U) {
// CHECK:STDOUT: %U.loc16_8.1 => constants.%U
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.62e
// CHECK:STDOUT: }
@@ -183,8 +183,8 @@ fn H() {
// CHECK:STDOUT: %T.loc19_6.1 => constants.%empty_struct_type
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %I.type.loc23_6.2 => constants.%I.type.a51
// CHECK:STDOUT: %require_complete.loc23_7.1 => constants.%complete_type.f92
// CHECK:STDOUT: %I.type.loc23_6.2 => constants.%I.type.ab5
// CHECK:STDOUT: %require_complete.loc23_7.1 => constants.%complete_type.5b1
// CHECK:STDOUT: %I.assoc_type => constants.%I.assoc_type.294
// CHECK:STDOUT: %assoc0 => constants.%assoc0.130
// CHECK:STDOUT: %require_complete.loc23_7.2 => constants.%complete_type.7fc
@@ -194,8 +194,8 @@ fn H() {
// CHECK:STDOUT: %T.loc15_13.1 => constants.%empty_struct_type
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %I.type => constants.%I.type.a51
// CHECK:STDOUT: %Self.loc15_23.2 => constants.%Self.dfb
// CHECK:STDOUT: %I.type => constants.%I.type.ab5
// CHECK:STDOUT: %Self.loc15_23.2 => constants.%Self.7ae
// CHECK:STDOUT: %I.F.type => constants.%I.F.type.550
// CHECK:STDOUT: %I.F => constants.%I.F.a1c
// CHECK:STDOUT: %I.assoc_type => constants.%I.assoc_type.294
+5 -5
View File
@@ -25,9 +25,9 @@ interface ForwardDeclared {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete]
// CHECK:STDOUT: %Self.6cb: %Empty.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.61e: %Empty.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %ForwardDeclared.type: type = facet_type <@ForwardDeclared> [concrete]
// CHECK:STDOUT: %Self.65a: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.8e7: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %ForwardDeclared.F.type: type = fn_type @ForwardDeclared.F [concrete]
// CHECK:STDOUT: %ForwardDeclared.F: %ForwardDeclared.F.type = struct_value () [concrete]
// CHECK:STDOUT: %ForwardDeclared.assoc_type: type = assoc_entity_type @ForwardDeclared [concrete]
@@ -45,7 +45,7 @@ interface ForwardDeclared {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Empty {
// CHECK:STDOUT: %Self: %Empty.type = symbolic_binding Self, 0 [symbolic = constants.%Self.6cb]
// CHECK:STDOUT: %Self: %Empty.type = symbolic_binding Self, 0 [symbolic = constants.%Self.61e]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -55,7 +55,7 @@ interface ForwardDeclared {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @ForwardDeclared {
// CHECK:STDOUT: %Self: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic = constants.%Self.65a]
// CHECK:STDOUT: %Self: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic = constants.%Self.8e7]
// CHECK:STDOUT: %ForwardDeclared.F.decl: %ForwardDeclared.F.type = fn_decl @ForwardDeclared.F [concrete = constants.%ForwardDeclared.F] {} {}
// CHECK:STDOUT: %assoc0: %ForwardDeclared.assoc_type = assoc_entity element0, %ForwardDeclared.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -71,5 +71,5 @@ interface ForwardDeclared {
// CHECK:STDOUT: fn();
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @ForwardDeclared.F(constants.%Self.65a) {}
// CHECK:STDOUT: specific @ForwardDeclared.F(constants.%Self.8e7) {}
// CHECK:STDOUT:
File diff suppressed because it is too large Load Diff
+32 -35
View File
@@ -32,9 +32,9 @@ class C {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self.095: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.0dc: type = symbolic_binding_type Self, 0, %Self.095 [symbolic]
// CHECK:STDOUT: %pattern_type.5e7: type = pattern_type %Self.binding.as_type.0dc [symbolic]
// CHECK:STDOUT: %Self.849: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.5c6: type = symbolic_binding_type Self, 0, %Self.849 [symbolic]
// CHECK:STDOUT: %pattern_type.b59: type = pattern_type %Self.binding.as_type.5c6 [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,13 @@ 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: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %require_complete.dc9: <witness> = require_complete_type %Self.binding.as_type.0dc [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.binding.as_type.5c6 [symbolic]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %C.val: %C = struct_value () [concrete]
// CHECK:STDOUT: %.408: type = fn_type_with_self_type %I.F.type, %I.facet [concrete]
// CHECK:STDOUT: %.24e: 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.binding.as_type.as.Destroy.impl.Op.type.727: 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.8fa: %DestroyT.binding.as_type.as.Destroy.impl.Op.type.727 = struct_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.8fa, @DestroyT.binding.as_type.as.Destroy.impl.Op(%facet_value) [concrete]
// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete]
// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -78,18 +75,18 @@ class C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.095]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.849]
// 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.5e7) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.5e7) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.b59) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.b59) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type.0dc) = 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.0dc)] {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.095)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0dc)]
// CHECK:STDOUT: %.loc18_16.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0dc)]
// CHECK:STDOUT: %self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type.5c6) = 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.5c6)] {
// CHECK:STDOUT: %Self.ref: %I.type = name_ref Self, @I.%Self [symbolic = %Self (constants.%Self.849)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.5c6)]
// CHECK:STDOUT: %.loc18_16.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.5c6)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @I.F.%Self.binding.as_type (%Self.binding.as_type.0dc) = value_binding self, %self.param
// CHECK:STDOUT: %self: @I.F.%Self.binding.as_type (%Self.binding.as_type.5c6) = value_binding self, %self.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0.ab7]
// CHECK:STDOUT:
@@ -136,14 +133,14 @@ class C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.095)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.0dc)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.5e7)]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.849)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.5c6)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.b59)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.binding.as_type [symbolic = %require_complete (constants.%require_complete.dc9)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %Self.binding.as_type [symbolic = %require_complete (constants.%require_complete)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type.0dc)) {
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type.5c6)) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %c.patt: %pattern_type.7c7 = ref_binding_pattern c [concrete]
@@ -159,14 +156,12 @@ class C {
// CHECK:STDOUT: %c.ref: ref %C = name_ref c, %c
// CHECK:STDOUT: %I.ref: type = name_ref I, @C.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: %F.ref: %I.assoc_type = name_ref F, @I.%assoc0 [concrete = constants.%assoc0.ab7]
// CHECK:STDOUT: %impl.elem0: %.408 = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%C.as.I.impl.F]
// CHECK:STDOUT: %bound_method.loc21: <bound method> = bound_method %c.ref, %impl.elem0
// CHECK:STDOUT: %impl.elem0: %.24e = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%C.as.I.impl.F]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %c.ref, %impl.elem0
// CHECK:STDOUT: %.loc21: %C = acquire_value %c.ref
// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %bound_method.loc21(%.loc21)
// 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.8fa
// 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.8fa, @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: %DestroyT.binding.as_type.as.Destroy.impl.Op.call: init %empty_tuple.type = call %bound_method.loc20(%c.var)
// CHECK:STDOUT: %C.as.I.impl.F.call: init %empty_tuple.type = call %bound_method(%.loc21)
// CHECK:STDOUT: %DestroyOp.bound: <bound method> = bound_method %c.var, constants.%DestroyOp
// CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%c.var)
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
@@ -176,10 +171,12 @@ class C {
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self.095) {
// CHECK:STDOUT: %Self => constants.%Self.095
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.0dc
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.5e7
// CHECK:STDOUT: fn @DestroyOp(%self.param: %C) = "no_op";
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self.849) {
// CHECK:STDOUT: %Self => constants.%Self.849
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.5c6
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b59
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%I.facet) {
@@ -40,17 +40,17 @@ interface Outer {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface> [concrete]
// CHECK:STDOUT: %Self.f87: %Interface.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.887: %Interface.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Interface.F.type: type = fn_type @Interface.F [concrete]
// CHECK:STDOUT: %Interface.F: %Interface.F.type = struct_value () [concrete]
// CHECK:STDOUT: %Outer.type: type = facet_type <@Outer> [concrete]
// CHECK:STDOUT: %Self.a10: %Outer.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Inner.type: type = facet_type <@Inner, @Inner(%Self.a10)> [symbolic]
// CHECK:STDOUT: %Self.151: %Inner.type = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Inner.F.type.922d8a.1: type = fn_type @Inner.F.loc30, @Inner(%Self.a10) [symbolic]
// CHECK:STDOUT: %Inner.F.2fd07f.1: %Inner.F.type.922d8a.1 = struct_value () [symbolic]
// CHECK:STDOUT: %Inner.F.type.922d8a.2: type = fn_type @Inner.F.loc36, @Inner(%Self.a10) [symbolic]
// CHECK:STDOUT: %Inner.F.2fd07f.2: %Inner.F.type.922d8a.2 = struct_value () [symbolic]
// CHECK:STDOUT: %Self.672: %Outer.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Inner.type: type = facet_type <@Inner, @Inner(%Self.672)> [symbolic]
// CHECK:STDOUT: %Self.eac: %Inner.type = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Inner.F.type.4b0134.1: type = fn_type @Inner.F.loc30, @Inner(%Self.672) [symbolic]
// CHECK:STDOUT: %Inner.F.a5d5f7.1: %Inner.F.type.4b0134.1 = struct_value () [symbolic]
// CHECK:STDOUT: %Inner.F.type.4b0134.2: type = fn_type @Inner.F.loc36, @Inner(%Self.672) [symbolic]
// CHECK:STDOUT: %Inner.F.a5d5f7.2: %Inner.F.type.4b0134.2 = struct_value () [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -64,7 +64,7 @@ interface Outer {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface {
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = constants.%Self.f87]
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = constants.%Self.887]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -75,9 +75,9 @@ interface Outer {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Outer {
// CHECK:STDOUT: %Self: %Outer.type = symbolic_binding Self, 0 [symbolic = constants.%Self.a10]
// CHECK:STDOUT: %Self: %Outer.type = symbolic_binding Self, 0 [symbolic = constants.%Self.672]
// CHECK:STDOUT: %Inner.decl: type = interface_decl @Inner [symbolic = constants.%Inner.type] {} {}
// CHECK:STDOUT: %Inner.F.decl: %Inner.F.type.922d8a.2 = fn_decl @Inner.F.loc36 [symbolic = constants.%Inner.F.2fd07f.2] {} {}
// CHECK:STDOUT: %Inner.F.decl: %Inner.F.type.4b0134.2 = fn_decl @Inner.F.loc36 [symbolic = constants.%Inner.F.a5d5f7.2] {} {}
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -89,15 +89,15 @@ interface Outer {
// CHECK:STDOUT:
// CHECK:STDOUT: generic interface @Inner(@Outer.%Self: %Outer.type) {
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Self.loc25_19.2: %Outer.type = symbolic_binding Self, 0 [symbolic = %Self.loc25_19.2 (constants.%Self.a10)]
// CHECK:STDOUT: %Self.loc25_19.2: %Outer.type = symbolic_binding Self, 0 [symbolic = %Self.loc25_19.2 (constants.%Self.672)]
// CHECK:STDOUT: %Inner.type: type = facet_type <@Inner, @Inner(%Self.loc25_19.2)> [symbolic = %Inner.type (constants.%Inner.type)]
// CHECK:STDOUT: %Self.loc25_19.3: @Inner.%Inner.type (%Inner.type) = symbolic_binding Self, 1 [symbolic = %Self.loc25_19.3 (constants.%Self.151)]
// CHECK:STDOUT: %Inner.F.type: type = fn_type @Inner.F.loc30, @Inner(%Self.loc25_19.2) [symbolic = %Inner.F.type (constants.%Inner.F.type.922d8a.1)]
// CHECK:STDOUT: %Inner.F: @Inner.%Inner.F.type (%Inner.F.type.922d8a.1) = struct_value () [symbolic = %Inner.F (constants.%Inner.F.2fd07f.1)]
// CHECK:STDOUT: %Self.loc25_19.3: @Inner.%Inner.type (%Inner.type) = symbolic_binding Self, 1 [symbolic = %Self.loc25_19.3 (constants.%Self.eac)]
// CHECK:STDOUT: %Inner.F.type: type = fn_type @Inner.F.loc30, @Inner(%Self.loc25_19.2) [symbolic = %Inner.F.type (constants.%Inner.F.type.4b0134.1)]
// CHECK:STDOUT: %Inner.F: @Inner.%Inner.F.type (%Inner.F.type.4b0134.1) = struct_value () [symbolic = %Inner.F (constants.%Inner.F.a5d5f7.1)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc25_19.1: @Inner.%Inner.type (%Inner.type) = symbolic_binding Self, 1 [symbolic = %Self.loc25_19.3 (constants.%Self.151)]
// CHECK:STDOUT: %Inner.F.decl: @Inner.%Inner.F.type (%Inner.F.type.922d8a.1) = fn_decl @Inner.F.loc30 [symbolic = @Inner.%Inner.F (constants.%Inner.F.2fd07f.1)] {} {}
// CHECK:STDOUT: %Self.loc25_19.1: @Inner.%Inner.type (%Inner.type) = symbolic_binding Self, 1 [symbolic = %Self.loc25_19.3 (constants.%Self.eac)]
// CHECK:STDOUT: %Inner.F.decl: @Inner.%Inner.F.type (%Inner.F.type.4b0134.1) = fn_decl @Inner.F.loc30 [symbolic = @Inner.%Inner.F (constants.%Inner.F.a5d5f7.1)] {} {}
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc25_19.1
@@ -125,18 +125,18 @@ interface Outer {
// CHECK:STDOUT: fn();
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Interface.F(constants.%Self.f87) {}
// CHECK:STDOUT: specific @Interface.F(constants.%Self.887) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Inner(constants.%Self.a10) {
// CHECK:STDOUT: specific @Inner(constants.%Self.672) {
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Self.loc25_19.2 => constants.%Self.a10
// CHECK:STDOUT: %Self.loc25_19.2 => constants.%Self.672
// CHECK:STDOUT: %Inner.type => constants.%Inner.type
// CHECK:STDOUT: %Self.loc25_19.3 => constants.%Self.151
// CHECK:STDOUT: %Inner.F.type => constants.%Inner.F.type.922d8a.1
// CHECK:STDOUT: %Inner.F => constants.%Inner.F.2fd07f.1
// CHECK:STDOUT: %Self.loc25_19.3 => constants.%Self.eac
// CHECK:STDOUT: %Inner.F.type => constants.%Inner.F.type.4b0134.1
// CHECK:STDOUT: %Inner.F => constants.%Inner.F.a5d5f7.1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Inner.F.loc30(constants.%Self.a10, constants.%Self.151) {}
// CHECK:STDOUT: specific @Inner.F.loc30(constants.%Self.672, constants.%Self.eac) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Inner.F.loc36(constants.%Self.a10, constants.%Self.151) {}
// CHECK:STDOUT: specific @Inner.F.loc36(constants.%Self.672, constants.%Self.eac) {}
// CHECK:STDOUT:
+112 -112
View File
@@ -95,10 +95,10 @@ interface C {
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %ImplicitAs.type.595: type = generic_interface_type @ImplicitAs [concrete]
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.595 = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.c63: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
// CHECK:STDOUT: %Self: %ImplicitAs.type.c63 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %ImplicitAs.type.9fe: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
// CHECK:STDOUT: %Self: %ImplicitAs.type.9fe = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.5d1: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.8de: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.51d: 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]
@@ -122,26 +122,26 @@ interface C {
// CHECK:STDOUT: %Dest.loc3_22.1: type = symbolic_binding Dest, 0 [symbolic = %Dest.loc3_22.1 (constants.%Dest)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc3_22.1)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.c63)]
// CHECK:STDOUT: %Self.loc3_35.2: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.c63) = symbolic_binding Self, 1 [symbolic = %Self.loc3_35.2 (constants.%Self)]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest.loc3_22.1)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.9fe)]
// CHECK:STDOUT: %Self.loc3_35.2: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.9fe) = symbolic_binding Self, 1 [symbolic = %Self.loc3_35.2 (constants.%Self)]
// CHECK:STDOUT: %ImplicitAs.Convert.type: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%Dest.loc3_22.1) [symbolic = %ImplicitAs.Convert.type (constants.%ImplicitAs.Convert.type)]
// CHECK:STDOUT: %ImplicitAs.Convert: @ImplicitAs.%ImplicitAs.Convert.type (%ImplicitAs.Convert.type) = struct_value () [symbolic = %ImplicitAs.Convert (constants.%ImplicitAs.Convert)]
// CHECK:STDOUT: %ImplicitAs.assoc_type: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%Dest.loc3_22.1) [symbolic = %ImplicitAs.assoc_type (constants.%ImplicitAs.assoc_type)]
// CHECK:STDOUT: %assoc0.loc4_35.2: @ImplicitAs.%ImplicitAs.assoc_type (%ImplicitAs.assoc_type) = assoc_entity element0, %ImplicitAs.Convert.decl [symbolic = %assoc0.loc4_35.2 (constants.%assoc0)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc3_35.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.c63) = symbolic_binding Self, 1 [symbolic = %Self.loc3_35.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc3_35.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.9fe) = symbolic_binding Self, 1 [symbolic = %Self.loc3_35.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.5d1) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @ImplicitAs.Convert.%pattern_type.loc4_14 (%pattern_type.5d1) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @ImplicitAs.Convert.%pattern_type.loc4_14 (%pattern_type.8de) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @ImplicitAs.Convert.%pattern_type.loc4_14 (%pattern_type.8de) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: @ImplicitAs.Convert.%pattern_type.loc4_28 (%pattern_type.51d) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @ImplicitAs.Convert.%pattern_type.loc4_28 (%pattern_type.51d) = 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.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.c63) = specific_constant @ImplicitAs.%Self.loc3_35.1, @ImplicitAs(constants.%Dest) [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.ref: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.c63) = name_ref Self, %.loc4_20.2 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc4_20.2: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.9fe) = specific_constant @ImplicitAs.%Self.loc3_35.1, @ImplicitAs(constants.%Dest) [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.ref: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.9fe) = name_ref Self, %.loc4_20.2 [symbolic = %Self (constants.%Self)]
// 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: }
@@ -161,12 +161,12 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @ImplicitAs.Convert(@ImplicitAs.%Dest.loc3_22.2: type, @ImplicitAs.%Self.loc3_35.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.c63)) {
// CHECK:STDOUT: generic fn @ImplicitAs.Convert(@ImplicitAs.%Dest.loc3_22.2: type, @ImplicitAs.%Self.loc3_35.1: @ImplicitAs.%ImplicitAs.type (%ImplicitAs.type.9fe)) {
// CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic = %Dest (constants.%Dest)]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.c63)]
// CHECK:STDOUT: %Self: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.c63) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %ImplicitAs.type: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic = %ImplicitAs.type (constants.%ImplicitAs.type.9fe)]
// CHECK:STDOUT: %Self: @ImplicitAs.Convert.%ImplicitAs.type (%ImplicitAs.type.9fe) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)]
// 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.5d1)]
// CHECK:STDOUT: %pattern_type.loc4_14: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type.loc4_14 (constants.%pattern_type.8de)]
// CHECK:STDOUT: %pattern_type.loc4_28: type = pattern_type %Dest [symbolic = %pattern_type.loc4_28 (constants.%pattern_type.51d)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @ImplicitAs.Convert.%Self.binding.as_type (%Self.binding.as_type)) -> @ImplicitAs.Convert.%Dest (%Dest);
@@ -178,10 +178,10 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @ImplicitAs.Convert(constants.%Dest, constants.%Self) {
// CHECK:STDOUT: %Dest => constants.%Dest
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.c63
// CHECK:STDOUT: %ImplicitAs.type => constants.%ImplicitAs.type.9fe
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.5d1
// CHECK:STDOUT: %pattern_type.loc4_14 => constants.%pattern_type.8de
// CHECK:STDOUT: %pattern_type.loc4_28 => constants.%pattern_type.51d
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -189,12 +189,12 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self.dba: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.ab9: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0.e06: %I.assoc_type = assoc_entity element0, @I.%T [concrete]
// CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete]
// CHECK:STDOUT: %Self.da6: %J.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.da6 [symbolic]
// CHECK:STDOUT: %Self.8a1: %J.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.8a1 [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]
@@ -219,7 +219,7 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.dba]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.ab9]
// CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] {
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete = constants.%assoc0.e06]
// CHECK:STDOUT: }
@@ -233,7 +233,7 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @J {
// CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = constants.%Self.da6]
// CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = constants.%Self.8a1]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: %T.ref: %I.assoc_type = name_ref T, @T.%assoc0 [concrete = constants.%assoc0.e06]
// CHECK:STDOUT: %U: %I.assoc_type = alias_binding U, @T.%assoc0 [concrete = constants.%assoc0.e06]
@@ -263,16 +263,16 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @J.F(@J.%Self: %J.type) {
// CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.da6)]
// CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.8a1)]
// 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: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T(constants.%Self.dba) {}
// CHECK:STDOUT: specific @T(constants.%Self.ab9) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @J.F(constants.%Self.da6) {
// CHECK:STDOUT: %Self => constants.%Self.da6
// CHECK:STDOUT: specific @J.F(constants.%Self.8a1) {
// CHECK:STDOUT: %Self => constants.%Self.8a1
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -280,31 +280,31 @@ interface C {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I2.type: type = facet_type <@I2> [concrete]
// CHECK:STDOUT: %Self.18c: %I2.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.36e: %I2.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I2.assoc_type: type = assoc_entity_type @I2 [concrete]
// CHECK:STDOUT: %assoc0.e09: %I2.assoc_type = assoc_entity element0, @I2.%T2 [concrete]
// CHECK:STDOUT: %J2.type: type = facet_type <@J2> [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self.c97: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.Self.c39: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %V: %J2.type = symbolic_binding V, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.7e4: type = pattern_type %J2.type [concrete]
// CHECK:STDOUT: %pattern_type.b4f: type = pattern_type %J2.type [concrete]
// CHECK:STDOUT: %V.binding.as_type: type = symbolic_binding_type V, 0, %V [symbolic]
// CHECK:STDOUT: %.Self.0f3: %I2.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.Self.feb: %I2.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.0f3 [symbolic_self]
// CHECK:STDOUT: %I2.lookup_impl_witness.92f: <witness> = lookup_impl_witness %.Self.0f3, @I2 [symbolic_self]
// CHECK:STDOUT: %impl.elem0.5f0: type = impl_witness_access %I2.lookup_impl_witness.92f, element0 [symbolic_self]
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.feb [symbolic_self]
// CHECK:STDOUT: %I2.lookup_impl_witness.c47: <witness> = lookup_impl_witness %.Self.feb, @I2 [symbolic_self]
// CHECK:STDOUT: %impl.elem0.f1d: type = impl_witness_access %I2.lookup_impl_witness.c47, element0 [symbolic_self]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %I2_where.type: type = facet_type <@I2 where %impl.elem0.5f0 = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %I2.impl_witness.d15: <witness> = impl_witness @V.binding.as_type.as.I2.impl.%I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%V) [symbolic]
// CHECK:STDOUT: %Self.e01: %J2.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.e01 [symbolic]
// CHECK:STDOUT: %I2.impl_witness.ab2: <witness> = impl_witness @V.binding.as_type.as.I2.impl.%I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%Self.e01) [symbolic]
// CHECK:STDOUT: %.d20: require_specific_def_type = require_specific_def @V.binding.as_type.as.I2.impl(%Self.e01) [symbolic]
// CHECK:STDOUT: %I2.lookup_impl_witness.67b: <witness> = lookup_impl_witness %Self.e01, @I2 [symbolic]
// CHECK:STDOUT: %I2.facet: %I2.type = facet_value %Self.binding.as_type, (%I2.lookup_impl_witness.67b) [symbolic]
// CHECK:STDOUT: %impl.elem0.f26: type = impl_witness_access %I2.lookup_impl_witness.67b, element0 [symbolic]
// CHECK:STDOUT: %pattern_type.ea5: type = pattern_type %impl.elem0.f26 [symbolic]
// CHECK:STDOUT: %I2_where.type: type = facet_type <@I2 where %impl.elem0.f1d = %empty_tuple.type> [concrete]
// CHECK:STDOUT: %I2.impl_witness.364: <witness> = impl_witness @V.binding.as_type.as.I2.impl.%I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%V) [symbolic]
// CHECK:STDOUT: %Self.4a7: %J2.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.4a7 [symbolic]
// CHECK:STDOUT: %I2.impl_witness.ddb: <witness> = impl_witness @V.binding.as_type.as.I2.impl.%I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%Self.4a7) [symbolic]
// CHECK:STDOUT: %.ef7: require_specific_def_type = require_specific_def @V.binding.as_type.as.I2.impl(%Self.4a7) [symbolic]
// CHECK:STDOUT: %I2.lookup_impl_witness.d97: <witness> = lookup_impl_witness %Self.4a7, @I2 [symbolic]
// CHECK:STDOUT: %I2.facet: %I2.type = facet_value %Self.binding.as_type, (%I2.lookup_impl_witness.d97) [symbolic]
// CHECK:STDOUT: %impl.elem0.006: type = impl_witness_access %I2.lookup_impl_witness.d97, element0 [symbolic]
// CHECK:STDOUT: %pattern_type.a14: type = pattern_type %impl.elem0.006 [symbolic]
// CHECK:STDOUT: %J2.F2.type: type = fn_type @J2.F2 [concrete]
// CHECK:STDOUT: %J2.F2: %J2.F2.type = struct_value () [concrete]
// CHECK:STDOUT: %J2.assoc_type: type = assoc_entity_type @J2 [concrete]
@@ -327,18 +327,18 @@ interface C {
// 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.binding.as_type.as.I2.impl [concrete] {
// CHECK:STDOUT: %V.patt: %pattern_type.7e4 = symbolic_binding_pattern V, 0 [concrete]
// CHECK:STDOUT: %V.patt: %pattern_type.b4f = 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: 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 = symbolic_binding .Self [symbolic_self = constants.%.Self.0f3]
// CHECK:STDOUT: %.Self.ref: %I2.type = name_ref .Self, %.Self.1 [symbolic_self = constants.%.Self.0f3]
// CHECK:STDOUT: %.Self.1: %I2.type = symbolic_binding .Self [symbolic_self = constants.%.Self.feb]
// CHECK:STDOUT: %.Self.ref: %I2.type = name_ref .Self, %.Self.1 [symbolic_self = constants.%.Self.feb]
// CHECK:STDOUT: %T2.ref: %I2.assoc_type = name_ref T2, @T2.%assoc0 [concrete = constants.%assoc0.e09]
// 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.92f, element0 [symbolic_self = constants.%impl.elem0.5f0]
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access constants.%I2.lookup_impl_witness.c47, element0 [symbolic_self = constants.%impl.elem0.f1d]
// CHECK:STDOUT: %.loc11_43.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc11_43.2: type = converted %.loc11_43.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %.loc11_30: type = where_expr %.Self.1 [concrete = constants.%I2_where.type] {
@@ -346,7 +346,7 @@ interface C {
// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc11_43.2
// CHECK:STDOUT: }
// CHECK:STDOUT: %.loc11_18: type = splice_block %J2.ref [concrete = constants.%J2.type] {
// CHECK:STDOUT: %.Self.2: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c97]
// CHECK:STDOUT: %.Self.2: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.c39]
// CHECK:STDOUT: %J2.ref: type = name_ref J2, file.%J2.decl.loc9 [concrete = constants.%J2.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %V.loc11_14.1: %J2.type = symbolic_binding V, 0 [symbolic = %V.loc11_14.2 (constants.%V)]
@@ -355,7 +355,7 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I2 {
// CHECK:STDOUT: %Self: %I2.type = symbolic_binding Self, 0 [symbolic = constants.%Self.18c]
// CHECK:STDOUT: %Self: %I2.type = symbolic_binding Self, 0 [symbolic = constants.%Self.36e]
// CHECK:STDOUT: %T2: type = assoc_const_decl @T2 [concrete] {
// CHECK:STDOUT: %assoc0: %I2.assoc_type = assoc_entity element0, @I2.%T2 [concrete = constants.%assoc0.e09]
// CHECK:STDOUT: }
@@ -369,21 +369,21 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @J2 {
// CHECK:STDOUT: %Self: %J2.type = symbolic_binding Self, 0 [symbolic = constants.%Self.e01]
// CHECK:STDOUT: %Self: %J2.type = symbolic_binding Self, 0 [symbolic = constants.%Self.4a7]
// CHECK:STDOUT: %I2.ref: type = name_ref I2, file.%I2.decl [concrete = constants.%I2.type]
// CHECK:STDOUT: %T2.ref: %I2.assoc_type = name_ref T2, @T2.%assoc0 [concrete = constants.%assoc0.e09]
// CHECK:STDOUT: %U2: %I2.assoc_type = alias_binding U2, @T2.%assoc0 [concrete = constants.%assoc0.e09]
// CHECK:STDOUT: %J2.F2.decl: %J2.F2.type = fn_decl @J2.F2 [concrete = constants.%J2.F2] {
// CHECK:STDOUT: %return.patt: @J2.F2.%pattern_type (%pattern_type.ea5) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @J2.F2.%pattern_type (%pattern_type.ea5) = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: %return.patt: @J2.F2.%pattern_type (%pattern_type.a14) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @J2.F2.%pattern_type (%pattern_type.a14) = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.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 %Self.as_type, (constants.%I2.lookup_impl_witness.67b) [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet)]
// CHECK:STDOUT: %I2.facet.loc15_14.2: %I2.type = facet_value %Self.as_type, (constants.%I2.lookup_impl_witness.d97) [symbolic = %I2.facet.loc15_14.1 (constants.%I2.facet)]
// CHECK:STDOUT: %.loc15_14.2: %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.67b, element0 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.f26)]
// CHECK:STDOUT: %U2.ref: type = name_ref U2, %impl.elem0.loc15_14.2 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.f26)]
// CHECK:STDOUT: %return.param: ref @J2.F2.%impl.elem0.loc15_14.1 (%impl.elem0.f26) = out_param call_param0
// CHECK:STDOUT: %return: ref @J2.F2.%impl.elem0.loc15_14.1 (%impl.elem0.f26) = return_slot %return.param
// CHECK:STDOUT: %impl.elem0.loc15_14.2: type = impl_witness_access constants.%I2.lookup_impl_witness.d97, element0 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.006)]
// CHECK:STDOUT: %U2.ref: type = name_ref U2, %impl.elem0.loc15_14.2 [symbolic = %impl.elem0.loc15_14.1 (constants.%impl.elem0.006)]
// CHECK:STDOUT: %return.param: ref @J2.F2.%impl.elem0.loc15_14.1 (%impl.elem0.006) = out_param call_param0
// CHECK:STDOUT: %return: ref @J2.F2.%impl.elem0.loc15_14.1 (%impl.elem0.006) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %assoc0: %J2.assoc_type = assoc_entity element0, %J2.F2.decl [concrete = constants.%assoc0.2a0]
// CHECK:STDOUT:
@@ -404,13 +404,13 @@ interface C {
// 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 = symbolic_binding V, 0 [symbolic = %V.loc11_14.2 (constants.%V)]
// 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.loc11_45.2: <witness> = impl_witness %I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%V.loc11_14.2) [symbolic = %I2.impl_witness.loc11_45.2 (constants.%I2.impl_witness.d15)]
// CHECK:STDOUT: %I2.impl_witness.loc11_45.2: <witness> = impl_witness %I2.impl_witness_table, @V.binding.as_type.as.I2.impl(%V.loc11_14.2) [symbolic = %I2.impl_witness.loc11_45.2 (constants.%I2.impl_witness.364)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %.loc11_22 as %.loc11_30 {
// 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.loc11_45.1: <witness> = impl_witness %I2.impl_witness_table, @V.binding.as_type.as.I2.impl(constants.%V) [symbolic = %I2.impl_witness.loc11_45.2 (constants.%I2.impl_witness.d15)]
// CHECK:STDOUT: %I2.impl_witness.loc11_45.1: <witness> = impl_witness %I2.impl_witness_table, @V.binding.as_type.as.I2.impl(constants.%V) [symbolic = %I2.impl_witness.loc11_45.2 (constants.%I2.impl_witness.364)]
// CHECK:STDOUT: %impl_witness_assoc_constant: type = impl_witness_assoc_constant constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
@@ -419,62 +419,62 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @J2.F2(@J2.%Self: %J2.type) {
// CHECK:STDOUT: %Self: %J2.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.e01)]
// CHECK:STDOUT: %Self: %J2.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.4a7)]
// 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: %.loc15_14.1: require_specific_def_type = require_specific_def @V.binding.as_type.as.I2.impl(%Self) [symbolic = %.loc15_14.1 (constants.%.d20)]
// CHECK:STDOUT: %I2.lookup_impl_witness: <witness> = lookup_impl_witness %Self, @I2 [symbolic = %I2.lookup_impl_witness (constants.%I2.lookup_impl_witness.67b)]
// CHECK:STDOUT: %.loc15_14.1: require_specific_def_type = require_specific_def @V.binding.as_type.as.I2.impl(%Self) [symbolic = %.loc15_14.1 (constants.%.ef7)]
// CHECK:STDOUT: %I2.lookup_impl_witness: <witness> = lookup_impl_witness %Self, @I2 [symbolic = %I2.lookup_impl_witness (constants.%I2.lookup_impl_witness.d97)]
// 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.f26)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc15_14.1 [symbolic = %pattern_type (constants.%pattern_type.ea5)]
// 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.006)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %impl.elem0.loc15_14.1 [symbolic = %pattern_type (constants.%pattern_type.a14)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> @J2.F2.%impl.elem0.loc15_14.1 (%impl.elem0.f26);
// CHECK:STDOUT: fn() -> @J2.F2.%impl.elem0.loc15_14.1 (%impl.elem0.006);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T2(constants.%Self.18c) {}
// CHECK:STDOUT: specific @T2(constants.%Self.36e) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T2(constants.%.Self.0f3) {}
// CHECK:STDOUT: specific @T2(constants.%.Self.feb) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @V.binding.as_type.as.I2.impl(constants.%V) {
// CHECK:STDOUT: %V.loc11_14.2 => constants.%V
// CHECK:STDOUT: %V.binding.as_type => constants.%V.binding.as_type
// CHECK:STDOUT: %I2.impl_witness.loc11_45.2 => constants.%I2.impl_witness.d15
// CHECK:STDOUT: %I2.impl_witness.loc11_45.2 => constants.%I2.impl_witness.364
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @V.binding.as_type.as.I2.impl(constants.%Self.e01) {
// CHECK:STDOUT: %V.loc11_14.2 => constants.%Self.e01
// CHECK:STDOUT: specific @V.binding.as_type.as.I2.impl(constants.%Self.4a7) {
// CHECK:STDOUT: %V.loc11_14.2 => constants.%Self.4a7
// CHECK:STDOUT: %V.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %I2.impl_witness.loc11_45.2 => constants.%I2.impl_witness.ab2
// CHECK:STDOUT: %I2.impl_witness.loc11_45.2 => constants.%I2.impl_witness.ddb
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T2(constants.%I2.facet) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @J2.F2(constants.%Self.e01) {
// CHECK:STDOUT: %Self => constants.%Self.e01
// CHECK:STDOUT: specific @J2.F2(constants.%Self.4a7) {
// CHECK:STDOUT: %Self => constants.%Self.4a7
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %.loc15_14.1 => constants.%.d20
// CHECK:STDOUT: %I2.lookup_impl_witness => constants.%I2.lookup_impl_witness.67b
// CHECK:STDOUT: %.loc15_14.1 => constants.%.ef7
// CHECK:STDOUT: %I2.lookup_impl_witness => constants.%I2.lookup_impl_witness.d97
// CHECK:STDOUT: %I2.facet.loc15_14.1 => constants.%I2.facet
// CHECK:STDOUT: %impl.elem0.loc15_14.1 => constants.%impl.elem0.f26
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ea5
// CHECK:STDOUT: %impl.elem0.loc15_14.1 => constants.%impl.elem0.006
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a14
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_call_method_alias.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %A.type: type = facet_type <@A> [concrete]
// CHECK:STDOUT: %Self.95d: %A.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.05e: type = symbolic_binding_type Self, 0, %Self.95d [symbolic]
// CHECK:STDOUT: %pattern_type.4d9: type = pattern_type %Self.binding.as_type.05e [symbolic]
// CHECK:STDOUT: %Self.c51: %A.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.55a: type = symbolic_binding_type Self, 0, %Self.c51 [symbolic]
// CHECK:STDOUT: %pattern_type.df1: type = pattern_type %Self.binding.as_type.55a [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]
// CHECK:STDOUT: %A.assoc_type: type = assoc_entity_type @A [concrete]
// CHECK:STDOUT: %assoc0.e44: %A.assoc_type = assoc_entity element0, @A.%A.F.decl [concrete]
// CHECK:STDOUT: %B.type: type = facet_type <@B> [concrete]
// CHECK:STDOUT: %Self.031: %B.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.6fe: type = symbolic_binding_type Self, 0, %Self.031 [symbolic]
// CHECK:STDOUT: %Self.d0b: %B.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.8ee: type = symbolic_binding_type Self, 0, %Self.d0b [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]
@@ -499,20 +499,20 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @A {
// CHECK:STDOUT: %Self: %A.type = symbolic_binding Self, 0 [symbolic = constants.%Self.95d]
// CHECK:STDOUT: %Self: %A.type = symbolic_binding Self, 0 [symbolic = constants.%Self.c51]
// 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.4d9) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @A.F.%pattern_type (%pattern_type.4d9) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @A.F.%pattern_type (%pattern_type.df1) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @A.F.%pattern_type (%pattern_type.df1) = 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.binding.as_type (%Self.binding.as_type.05e) = 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.05e)] {
// CHECK:STDOUT: %Self.ref: %A.type = name_ref Self, @A.%Self [symbolic = %Self (constants.%Self.95d)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.05e)]
// CHECK:STDOUT: %.loc6_14.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.05e)]
// CHECK:STDOUT: %self.param: @A.F.%Self.binding.as_type (%Self.binding.as_type.55a) = 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.55a)] {
// CHECK:STDOUT: %Self.ref: %A.type = name_ref Self, @A.%Self [symbolic = %Self (constants.%Self.c51)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.55a)]
// CHECK:STDOUT: %.loc6_14.2: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.55a)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self: @A.F.%Self.binding.as_type (%Self.binding.as_type.05e) = value_binding self, %self.param
// CHECK:STDOUT: %self: @A.F.%Self.binding.as_type (%Self.binding.as_type.55a) = value_binding self, %self.param
// CHECK:STDOUT: %return.param: ref type = out_param call_param1
// CHECK:STDOUT: %return: ref type = return_slot %return.param
// CHECK:STDOUT: }
@@ -527,7 +527,7 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @B {
// CHECK:STDOUT: %Self: %B.type = symbolic_binding Self, 0 [symbolic = constants.%Self.031]
// CHECK:STDOUT: %Self: %B.type = symbolic_binding Self, 0 [symbolic = constants.%Self.d0b]
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A.type]
// CHECK:STDOUT: %F.ref: %A.assoc_type = name_ref F, @A.%assoc0 [concrete = constants.%assoc0.e44]
// CHECK:STDOUT: %F: %A.assoc_type = alias_binding F, @A.%assoc0 [concrete = constants.%assoc0.e44]
@@ -535,7 +535,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: type = facet_access_type @B.%Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.6fe)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type @B.%Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.8ee)]
// 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
@@ -553,29 +553,29 @@ interface C {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @A.F(@A.%Self: %A.type) {
// CHECK:STDOUT: %Self: %A.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.95d)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.05e)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.4d9)]
// CHECK:STDOUT: %Self: %A.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c51)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.55a)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.df1)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @A.F.%Self.binding.as_type (%Self.binding.as_type.05e)) -> type;
// CHECK:STDOUT: fn(%self.param: @A.F.%Self.binding.as_type (%Self.binding.as_type.55a)) -> type;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @B.G(@B.%Self: %B.type) {
// CHECK:STDOUT: %Self: %B.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.031)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.6fe)]
// CHECK:STDOUT: %Self: %B.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.d0b)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.8ee)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> <error>;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @A.F(constants.%Self.95d) {
// CHECK:STDOUT: %Self => constants.%Self.95d
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.05e
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.4d9
// CHECK:STDOUT: specific @A.F(constants.%Self.c51) {
// CHECK:STDOUT: %Self => constants.%Self.c51
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.55a
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.df1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @B.G(constants.%Self.031) {
// CHECK:STDOUT: %Self => constants.%Self.031
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.6fe
// CHECK:STDOUT: specific @B.G(constants.%Self.d0b) {
// CHECK:STDOUT: %Self => constants.%Self.d0b
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.8ee
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- call_with_compound_member_access.carbon
@@ -595,8 +595,8 @@ interface C {
// CHECK:STDOUT: %assoc1: %C.assoc_type = assoc_entity element1, @C.%C.G.decl [concrete]
// 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: %.191: type = fn_type_with_self_type %C.F.type, %Self [symbolic]
// CHECK:STDOUT: %impl.elem0: %.191 = impl_witness_access %C.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %.52c: type = fn_type_with_self_type %C.F.type, %Self [symbolic]
// CHECK:STDOUT: %impl.elem0: %.52c = impl_witness_access %C.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %specific_impl_fn: <specific function> = specific_impl_function %impl.elem0, @C.F(%Self) [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -669,22 +669,22 @@ interface C {
// CHECK:STDOUT: !definition:
// 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: type = fn_type_with_self_type constants.%C.F.type, %Self [symbolic = %.loc9 (constants.%.191)]
// CHECK:STDOUT: %impl.elem0.loc9_9.2: @C.G.%.loc9 (%.191) = impl_witness_access %C.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_9.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %.loc9: type = fn_type_with_self_type constants.%C.F.type, %Self [symbolic = %.loc9 (constants.%.52c)]
// CHECK:STDOUT: %impl.elem0.loc9_9.2: @C.G.%.loc9 (%.52c) = 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.binding.as_type (%Self.binding.as_type)) {
// CHECK:STDOUT: !entry:
// 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 (%.191) = impl_witness_access constants.%C.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_9.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %impl.elem0.loc9_9.1: @C.G.%.loc9 (%.52c) = 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: %C.F.call.loc9: init %empty_tuple.type = call %bound_method.loc9_12(%self.ref.loc9)
// 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 (%.191) = 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 (%.191) = name_ref F, %impl.elem0.loc10 [symbolic = %impl.elem0.loc9_9.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %impl.elem0.loc10: @C.G.%.loc9 (%.52c) = 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 (%.52c) = 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
// CHECK:STDOUT: %specific_impl_fn.loc10: <specific function> = specific_impl_function %F.ref.loc10, @C.F(constants.%Self) [symbolic = %specific_impl_fn.loc9_9.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT: %bound_method.loc10_14: <bound method> = bound_method %self.ref.loc10, %specific_impl_fn.loc10
@@ -27,7 +27,7 @@ interface I {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self.dba: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.ab9: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0.e06: %I.assoc_type = assoc_entity element0, @I.%T [concrete]
// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete]
@@ -54,7 +54,7 @@ interface I {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.dba]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.ab9]
// CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] {
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete = constants.%assoc0.e06]
// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42]
@@ -75,5 +75,5 @@ interface I {
// CHECK:STDOUT: assoc_const T:! type = <error>;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T(constants.%Self.dba) {}
// CHECK:STDOUT: specific @T(constants.%Self.ab9) {}
// CHECK:STDOUT:
@@ -34,7 +34,7 @@ fn Use(T:! I) {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.0ed: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.fa0: 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]
@@ -42,14 +42,14 @@ fn Use(T:! I) {
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.a15: type = pattern_type %I.type [concrete]
// CHECK:STDOUT: %pattern_type.9d9: 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.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: %.766: type = fn_type_with_self_type %I.F.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem0: %.766 = impl_witness_access %I.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.766 [symbolic]
// CHECK:STDOUT: %.354: type = fn_type_with_self_type %I.F.type, %T [symbolic]
// CHECK:STDOUT: %impl.elem0: %.354 = impl_witness_access %I.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.354 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -59,7 +59,7 @@ fn Use(T:! I) {
// CHECK:STDOUT: }
// CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {}
// CHECK:STDOUT: %Use.decl: %Use.type = fn_decl @Use [concrete = constants.%Use] {
// CHECK:STDOUT: %T.patt: %pattern_type.a15 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.9d9 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc8: type = splice_block %I.ref [concrete = constants.%I.type] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
@@ -72,8 +72,8 @@ fn Use(T:! I) {
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding 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.0ed) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.0ed) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @I.F.%pattern_type (%pattern_type.fa0) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.F.%pattern_type (%pattern_type.fa0) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// 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)] {
@@ -96,7 +96,7 @@ fn Use(T:! I) {
// CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)]
// 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.0ed)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.fa0)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.F.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
@@ -107,8 +107,8 @@ fn Use(T:! I) {
// CHECK:STDOUT: !definition:
// 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.%.766)]
// CHECK:STDOUT: %impl.elem0.loc13_4.2: @Use.%.loc13_4.2 (%.766) = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc13_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %.loc13_4.2: type = fn_type_with_self_type constants.%I.F.type, %T.loc8_8.1 [symbolic = %.loc13_4.2 (constants.%.354)]
// CHECK:STDOUT: %impl.elem0.loc13_4.2: @Use.%.loc13_4.2 (%.354) = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc13_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc13_4.2 [symbolic = %require_complete (constants.%require_complete)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
@@ -117,7 +117,7 @@ fn Use(T:! I) {
// CHECK:STDOUT: %F.ref: %I.assoc_type = name_ref F, @I.%assoc0 [concrete = constants.%assoc0]
// 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 (%.766) = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc13_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %impl.elem0.loc13_4.1: @Use.%.loc13_4.2 (%.354) = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc13_4.2 (constants.%impl.elem0)]
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
@@ -125,7 +125,7 @@ fn Use(T:! I) {
// CHECK:STDOUT: specific @I.F(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0ed
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fa0
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Use(constants.%T) {
@@ -51,13 +51,13 @@ interface I {}
// CHECK:STDOUT: --- fail_b.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type.61ffe0.1: type = facet_type <@I.1> [concrete]
// CHECK:STDOUT: %I.type.61ffe0.2: type = facet_type <@I.loc13> [concrete]
// CHECK:STDOUT: %Self: %I.type.61ffe0.2 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I.type.c787dc.1: type = facet_type <@I.1> [concrete]
// CHECK:STDOUT: %I.type.c787dc.2: type = facet_type <@I.loc13> [concrete]
// CHECK:STDOUT: %Self: %I.type.c787dc.2 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Main.I: type = import_ref Main//a, I, loaded [concrete = constants.%I.type.61ffe0.1]
// CHECK:STDOUT: %Main.I: type = import_ref Main//a, I, loaded [concrete = constants.%I.type.c787dc.1]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -65,13 +65,13 @@ interface I {}
// CHECK:STDOUT: .I = imports.%Main.I
// CHECK:STDOUT: }
// CHECK:STDOUT: %default.import = import <none>
// CHECK:STDOUT: %I.decl: type = interface_decl @I.loc13 [concrete = constants.%I.type.61ffe0.2] {} {}
// CHECK:STDOUT: %I.decl: type = interface_decl @I.loc13 [concrete = constants.%I.type.c787dc.2] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I.1 [from "a.carbon"];
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I.loc13 {
// CHECK:STDOUT: %Self: %I.type.61ffe0.2 = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %Self: %I.type.c787dc.2 = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
+26 -26
View File
@@ -77,10 +77,10 @@ interface Class { }
// CHECK:STDOUT: --- fail_redefine_without_dependents.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Interface.type.6482b9.1: type = facet_type <@Interface.loc4> [concrete]
// CHECK:STDOUT: %Self.f870f2.1: %Interface.type.6482b9.1 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Interface.type.6482b9.2: type = facet_type <@Interface.loc13> [concrete]
// CHECK:STDOUT: %Self.f870f2.2: %Interface.type.6482b9.2 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Interface.type.6f2e43.1: type = facet_type <@Interface.loc4> [concrete]
// CHECK:STDOUT: %Self.8875a4.1: %Interface.type.6f2e43.1 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Interface.type.6f2e43.2: type = facet_type <@Interface.loc13> [concrete]
// CHECK:STDOUT: %Self.8875a4.2: %Interface.type.6f2e43.2 = symbolic_binding Self, 0 [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]
@@ -91,12 +91,12 @@ interface Class { }
// CHECK:STDOUT: package: <namespace> = namespace [concrete] {
// CHECK:STDOUT: .Interface = %Interface.decl.loc4
// CHECK:STDOUT: }
// CHECK:STDOUT: %Interface.decl.loc4: type = interface_decl @Interface.loc4 [concrete = constants.%Interface.type.6482b9.1] {} {}
// CHECK:STDOUT: %Interface.decl.loc13: type = interface_decl @Interface.loc13 [concrete = constants.%Interface.type.6482b9.2] {} {}
// CHECK:STDOUT: %Interface.decl.loc4: type = interface_decl @Interface.loc4 [concrete = constants.%Interface.type.6f2e43.1] {} {}
// CHECK:STDOUT: %Interface.decl.loc13: type = interface_decl @Interface.loc13 [concrete = constants.%Interface.type.6f2e43.2] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface.loc4 {
// CHECK:STDOUT: %Self: %Interface.type.6482b9.1 = symbolic_binding Self, 0 [symbolic = constants.%Self.f870f2.1]
// CHECK:STDOUT: %Self: %Interface.type.6f2e43.1 = symbolic_binding Self, 0 [symbolic = constants.%Self.8875a4.1]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -106,7 +106,7 @@ interface Class { }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface.loc13 {
// CHECK:STDOUT: %Self: %Interface.type.6482b9.2 = symbolic_binding Self, 0 [symbolic = constants.%Self.f870f2.2]
// CHECK:STDOUT: %Self: %Interface.type.6f2e43.2 = symbolic_binding Self, 0 [symbolic = constants.%Self.8875a4.2]
// CHECK:STDOUT: %Interface.F.decl: %Interface.F.type = fn_decl @Interface.F [concrete = constants.%Interface.F] {} {}
// CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, %Interface.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -118,20 +118,20 @@ interface Class { }
// CHECK:STDOUT: !requires:
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Interface.F(@Interface.loc13.%Self: %Interface.type.6482b9.2) {
// CHECK:STDOUT: generic fn @Interface.F(@Interface.loc13.%Self: %Interface.type.6f2e43.2) {
// CHECK:STDOUT: fn();
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Interface.F(constants.%Self.f870f2.2) {}
// CHECK:STDOUT: specific @Interface.F(constants.%Self.8875a4.2) {}
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_redefine_with_dependents.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Interface.type.6482b9.1: type = facet_type <@Interface.loc4> [concrete]
// CHECK:STDOUT: %Self.f870f2.1: %Interface.type.6482b9.1 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Interface.type.6482b9.2: type = facet_type <@Interface.loc13> [concrete]
// CHECK:STDOUT: %Self.f870f2.2: %Interface.type.6482b9.2 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.f870f2.2 [symbolic]
// CHECK:STDOUT: %Interface.type.6f2e43.1: type = facet_type <@Interface.loc4> [concrete]
// CHECK:STDOUT: %Self.8875a4.1: %Interface.type.6f2e43.1 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Interface.type.6f2e43.2: type = facet_type <@Interface.loc13> [concrete]
// CHECK:STDOUT: %Self.8875a4.2: %Interface.type.6f2e43.2 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.8875a4.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]
@@ -143,12 +143,12 @@ interface Class { }
// CHECK:STDOUT: package: <namespace> = namespace [concrete] {
// CHECK:STDOUT: .Interface = %Interface.decl.loc4
// CHECK:STDOUT: }
// CHECK:STDOUT: %Interface.decl.loc4: type = interface_decl @Interface.loc4 [concrete = constants.%Interface.type.6482b9.1] {} {}
// CHECK:STDOUT: %Interface.decl.loc13: type = interface_decl @Interface.loc13 [concrete = constants.%Interface.type.6482b9.2] {} {}
// CHECK:STDOUT: %Interface.decl.loc4: type = interface_decl @Interface.loc4 [concrete = constants.%Interface.type.6f2e43.1] {} {}
// CHECK:STDOUT: %Interface.decl.loc13: type = interface_decl @Interface.loc13 [concrete = constants.%Interface.type.6f2e43.2] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface.loc4 {
// CHECK:STDOUT: %Self: %Interface.type.6482b9.1 = symbolic_binding Self, 0 [symbolic = constants.%Self.f870f2.1]
// CHECK:STDOUT: %Self: %Interface.type.6f2e43.1 = symbolic_binding Self, 0 [symbolic = constants.%Self.8875a4.1]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -158,14 +158,14 @@ interface Class { }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface.loc13 {
// CHECK:STDOUT: %Self: %Interface.type.6482b9.2 = symbolic_binding Self, 0 [symbolic = constants.%Self.f870f2.2]
// CHECK:STDOUT: %Self: %Interface.type.6f2e43.2 = symbolic_binding Self, 0 [symbolic = constants.%Self.8875a4.2]
// CHECK:STDOUT: %Interface.F.decl: %Interface.F.type = fn_decl @Interface.F [concrete = constants.%Interface.F] {
// CHECK:STDOUT: %self.patt: @Interface.F.%pattern_type (%pattern_type) = value_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.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.6482b9.2 = name_ref Self, @Interface.loc13.%Self [symbolic = %Self (constants.%Self.f870f2.2)]
// CHECK:STDOUT: %Self.ref: %Interface.type.6f2e43.2 = name_ref Self, @Interface.loc13.%Self [symbolic = %Self (constants.%Self.8875a4.2)]
// 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: }
@@ -181,16 +181,16 @@ interface Class { }
// CHECK:STDOUT: !requires:
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Interface.F(@Interface.loc13.%Self: %Interface.type.6482b9.2) {
// CHECK:STDOUT: %Self: %Interface.type.6482b9.2 = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.f870f2.2)]
// CHECK:STDOUT: generic fn @Interface.F(@Interface.loc13.%Self: %Interface.type.6f2e43.2) {
// CHECK:STDOUT: %Self: %Interface.type.6f2e43.2 = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.8875a4.2)]
// 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.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Interface.F(constants.%Self.f870f2.2) {
// CHECK:STDOUT: %Self => constants.%Self.f870f2.2
// CHECK:STDOUT: specific @Interface.F(constants.%Self.8875a4.2) {
// CHECK:STDOUT: %Self => constants.%Self.8875a4.2
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type
// CHECK:STDOUT: }
@@ -200,7 +200,7 @@ interface Class { }
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Function.type.7c0: type = fn_type @Function.loc4 [concrete]
// CHECK:STDOUT: %Function: %Function.type.7c0 = struct_value () [concrete]
// CHECK:STDOUT: %Function.type.0d0: type = facet_type <@Function.loc13> [concrete]
// CHECK:STDOUT: %Function.type.1b7: type = facet_type <@Function.loc13> [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -208,7 +208,7 @@ interface Class { }
// CHECK:STDOUT: .Function = %Function.decl.loc4
// CHECK:STDOUT: }
// CHECK:STDOUT: %Function.decl.loc4: %Function.type.7c0 = fn_decl @Function.loc4 [concrete = constants.%Function] {} {}
// CHECK:STDOUT: %Function.decl.loc13: type = interface_decl @Function.loc13 [concrete = constants.%Function.type.0d0] {} {}
// CHECK:STDOUT: %Function.decl.loc13: type = interface_decl @Function.loc13 [concrete = constants.%Function.type.1b7] {} {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Function.loc13;
@@ -45,7 +45,7 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: --- fail_generic_redeclaration.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %NotGeneric.type.803: type = facet_type <@NotGeneric.loc15> [concrete]
// CHECK:STDOUT: %NotGeneric.type.a72: type = facet_type <@NotGeneric.loc15> [concrete]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic]
@@ -53,12 +53,12 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: %NotGeneric.type.af7: type = generic_interface_type @NotGeneric.loc23 [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %NotGeneric.generic: %NotGeneric.type.af7 = struct_value () [concrete]
// CHECK:STDOUT: %NotGeneric.type.b2f: type = facet_type <@NotGeneric.loc23, @NotGeneric.loc23(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.eb4: %NotGeneric.type.b2f = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %NotGeneric.type.b27: type = facet_type <@NotGeneric.loc23, @NotGeneric.loc23(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.b1e: %NotGeneric.type.b27 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.type.835: type = generic_interface_type @Generic.loc25 [concrete]
// CHECK:STDOUT: %Generic.generic: %Generic.type.835 = struct_value () [concrete]
// CHECK:STDOUT: %Generic.type.e53: type = facet_type <@Generic.loc33> [concrete]
// CHECK:STDOUT: %Self.590: %Generic.type.e53 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Generic.type.aac: type = facet_type <@Generic.loc33> [concrete]
// CHECK:STDOUT: %Self.863: %Generic.type.aac = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %DifferentParams.type.0d8654.1: type = generic_interface_type @DifferentParams.loc35 [concrete]
// CHECK:STDOUT: %DifferentParams.generic.de7f43.1: %DifferentParams.type.0d8654.1 = struct_value () [concrete]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
@@ -66,8 +66,8 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %empty_tuple.type [concrete]
// CHECK:STDOUT: %DifferentParams.type.0d8654.2: type = generic_interface_type @DifferentParams.loc43 [concrete]
// CHECK:STDOUT: %DifferentParams.generic.de7f43.2: %DifferentParams.type.0d8654.2 = struct_value () [concrete]
// CHECK:STDOUT: %DifferentParams.type.ae0: type = facet_type <@DifferentParams.loc43, @DifferentParams.loc43(%T.d5f)> [symbolic]
// CHECK:STDOUT: %Self.922: %DifferentParams.type.ae0 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %DifferentParams.type.7f1: type = facet_type <@DifferentParams.loc43, @DifferentParams.loc43(%T.d5f)> [symbolic]
// CHECK:STDOUT: %Self.afe: %DifferentParams.type.7f1 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -76,7 +76,7 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: .Generic = %Generic.decl.loc25
// CHECK:STDOUT: .DifferentParams = %DifferentParams.decl.loc35
// CHECK:STDOUT: }
// CHECK:STDOUT: %NotGeneric.decl.loc15: type = interface_decl @NotGeneric.loc15 [concrete = constants.%NotGeneric.type.803] {} {}
// CHECK:STDOUT: %NotGeneric.decl.loc15: type = interface_decl @NotGeneric.loc15 [concrete = constants.%NotGeneric.type.a72] {} {}
// CHECK:STDOUT: %NotGeneric.decl.loc23: %NotGeneric.type.af7 = interface_decl @NotGeneric.loc23 [concrete = constants.%NotGeneric.generic] {
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
@@ -89,7 +89,7 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %T.loc25_19.2: type = symbolic_binding T, 0 [symbolic = %T.loc25_19.1 (constants.%T.67d)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Generic.decl.loc33: type = interface_decl @Generic.loc33 [concrete = constants.%Generic.type.e53] {} {}
// CHECK:STDOUT: %Generic.decl.loc33: type = interface_decl @Generic.loc33 [concrete = constants.%Generic.type.aac] {} {}
// CHECK:STDOUT: %DifferentParams.decl.loc35: %DifferentParams.type.0d8654.1 = interface_decl @DifferentParams.loc35 [concrete = constants.%DifferentParams.generic.de7f43.1] {
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
@@ -114,11 +114,11 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: %T.loc23_22.1: type = symbolic_binding T, 0 [symbolic = %T.loc23_22.1 (constants.%T.67d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %NotGeneric.type: type = facet_type <@NotGeneric.loc23, @NotGeneric.loc23(%T.loc23_22.1)> [symbolic = %NotGeneric.type (constants.%NotGeneric.type.b2f)]
// CHECK:STDOUT: %Self.loc23_32.2: @NotGeneric.loc23.%NotGeneric.type (%NotGeneric.type.b2f) = symbolic_binding Self, 1 [symbolic = %Self.loc23_32.2 (constants.%Self.eb4)]
// CHECK:STDOUT: %NotGeneric.type: type = facet_type <@NotGeneric.loc23, @NotGeneric.loc23(%T.loc23_22.1)> [symbolic = %NotGeneric.type (constants.%NotGeneric.type.b27)]
// CHECK:STDOUT: %Self.loc23_32.2: @NotGeneric.loc23.%NotGeneric.type (%NotGeneric.type.b27) = symbolic_binding Self, 1 [symbolic = %Self.loc23_32.2 (constants.%Self.b1e)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc23_32.1: @NotGeneric.loc23.%NotGeneric.type (%NotGeneric.type.b2f) = symbolic_binding Self, 1 [symbolic = %Self.loc23_32.2 (constants.%Self.eb4)]
// CHECK:STDOUT: %Self.loc23_32.1: @NotGeneric.loc23.%NotGeneric.type (%NotGeneric.type.b27) = symbolic_binding Self, 1 [symbolic = %Self.loc23_32.2 (constants.%Self.b1e)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc23_32.1
@@ -135,7 +135,7 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Generic.loc33 {
// CHECK:STDOUT: %Self: %Generic.type.e53 = symbolic_binding Self, 0 [symbolic = constants.%Self.590]
// CHECK:STDOUT: %Self: %Generic.type.aac = symbolic_binding Self, 0 [symbolic = constants.%Self.863]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -154,11 +154,11 @@ interface DifferentParams(T:! ()) {}
// CHECK:STDOUT: %T.loc43_27.1: %empty_tuple.type = symbolic_binding T, 0 [symbolic = %T.loc43_27.1 (constants.%T.d5f)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %DifferentParams.type: type = facet_type <@DifferentParams.loc43, @DifferentParams.loc43(%T.loc43_27.1)> [symbolic = %DifferentParams.type (constants.%DifferentParams.type.ae0)]
// CHECK:STDOUT: %Self.loc43_35.2: @DifferentParams.loc43.%DifferentParams.type (%DifferentParams.type.ae0) = symbolic_binding Self, 1 [symbolic = %Self.loc43_35.2 (constants.%Self.922)]
// CHECK:STDOUT: %DifferentParams.type: type = facet_type <@DifferentParams.loc43, @DifferentParams.loc43(%T.loc43_27.1)> [symbolic = %DifferentParams.type (constants.%DifferentParams.type.7f1)]
// CHECK:STDOUT: %Self.loc43_35.2: @DifferentParams.loc43.%DifferentParams.type (%DifferentParams.type.7f1) = symbolic_binding Self, 1 [symbolic = %Self.loc43_35.2 (constants.%Self.afe)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc43_35.1: @DifferentParams.loc43.%DifferentParams.type (%DifferentParams.type.ae0) = symbolic_binding Self, 1 [symbolic = %Self.loc43_35.2 (constants.%Self.922)]
// CHECK:STDOUT: %Self.loc43_35.1: @DifferentParams.loc43.%DifferentParams.type (%DifferentParams.type.7f1) = symbolic_binding Self, 1 [symbolic = %Self.loc43_35.2 (constants.%Self.afe)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc43_35.1
@@ -50,7 +50,7 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface> [concrete]
// CHECK:STDOUT: %Self.f87: %Interface.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.887: %Interface.type = symbolic_binding Self, 0 [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 [concrete]
@@ -62,11 +62,11 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete]
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
// CHECK:STDOUT: %Different.type: type = facet_type <@Different> [concrete]
// CHECK:STDOUT: %Self.599: %Different.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.b4f: %Different.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %U: %Different.type = symbolic_binding U, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.8e5: type = pattern_type %Different.type [concrete]
// CHECK:STDOUT: %pattern_type.cb4: type = pattern_type %Different.type [concrete]
// 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]
@@ -96,7 +96,7 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
// CHECK:STDOUT: %Different.decl: type = interface_decl @Different [concrete = constants.%Different.type] {} {}
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %U.patt: %pattern_type.8e5 = symbolic_binding_pattern U, 0 [concrete]
// CHECK:STDOUT: %U.patt: %pattern_type.cb4 = symbolic_binding_pattern U, 0 [concrete]
// 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: } {
@@ -115,7 +115,7 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface {
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = constants.%Self.f87]
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = constants.%Self.887]
// CHECK:STDOUT: %Interface.F.decl: %Interface.F.type = fn_decl @Interface.F [concrete = constants.%Interface.F] {} {}
// CHECK:STDOUT: %assoc0: %Interface.assoc_type = assoc_entity element0, %Interface.F.decl [concrete = constants.%assoc0.fcf]
// CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] {
@@ -132,7 +132,7 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Different {
// CHECK:STDOUT: %Self: %Different.type = symbolic_binding Self, 0 [symbolic = constants.%Self.599]
// CHECK:STDOUT: %Self: %Different.type = symbolic_binding Self, 0 [symbolic = constants.%Self.b4f]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -174,9 +174,9 @@ fn G(U:! Different) -> U.(Interface.T);
// CHECK:STDOUT: fn() -> <error>;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Interface.F(constants.%Self.f87) {}
// CHECK:STDOUT: specific @Interface.F(constants.%Self.887) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T(constants.%Self.f87) {}
// CHECK:STDOUT: specific @T(constants.%Self.887) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @G(constants.%U) {
// CHECK:STDOUT: %U.loc32_6.1 => constants.%U
@@ -29,7 +29,7 @@ interface I {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self.dba: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.ab9: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0.e06: %I.assoc_type = assoc_entity element0, @I.%T [concrete]
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
@@ -43,18 +43,18 @@ interface I {
// CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete]
// CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete]
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.d14: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
// CHECK:STDOUT: %ImplicitAs.type.e8c: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
// CHECK:STDOUT: %ImplicitAs.Convert.type.1b6: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%i32) [concrete]
// CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.412: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.740: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.412 = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.impl_witness.57f: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.8c3, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.84b: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.84b = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.d14 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.57f) [concrete]
// CHECK:STDOUT: %.dbf: type = fn_type_with_self_type %ImplicitAs.Convert.type.1b6, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0 [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6 = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.impl_witness.6bc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.e8c = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.6bc) [concrete]
// CHECK:STDOUT: %.863: type = fn_type_with_self_type %ImplicitAs.Convert.type.1b6, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
// CHECK:STDOUT: %int_42.c68: %i32 = int_value 42 [concrete]
// CHECK:STDOUT: }
@@ -68,8 +68,8 @@ interface I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
// CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
// CHECK:STDOUT: %Core.import_ref.1b5: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.412) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.740)]
// CHECK:STDOUT: %ImplicitAs.impl_witness_table.8c3 = impl_witness_table (%Core.import_ref.1b5), @Core.IntLiteral.as.ImplicitAs.impl [concrete]
// CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)]
// CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -82,7 +82,7 @@ interface I {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.dba]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.ab9]
// CHECK:STDOUT: %T: type = assoc_const_decl @T [concrete] {
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%T [concrete = constants.%assoc0.e06]
// CHECK:STDOUT: %int_32.loc20_27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
@@ -95,7 +95,7 @@ interface I {
// CHECK:STDOUT: %N: %i32 = assoc_const_decl @N [concrete] {
// CHECK:STDOUT: %assoc1: %I.assoc_type = assoc_entity element1, @I.%N [concrete = constants.%assoc1]
// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e]
// CHECK:STDOUT: %impl.elem0: %.dbf = impl_witness_access constants.%ImplicitAs.impl_witness.57f, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0]
// CHECK:STDOUT: %impl.elem0: %.863 = impl_witness_access constants.%ImplicitAs.impl_witness.6bc, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5]
// CHECK:STDOUT: %bound_method.loc25_27.1: <bound method> = bound_method %int_42, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound]
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc25_27.2: <bound method> = bound_method %int_42, %specific_fn [concrete = constants.%bound_method]
@@ -125,7 +125,7 @@ interface I {
// CHECK:STDOUT: assoc_const N:! %i32 = %.loc25_27.2;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T(constants.%Self.dba) {}
// CHECK:STDOUT: specific @T(constants.%Self.ab9) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @N(constants.%Self.dba) {}
// CHECK:STDOUT: specific @N(constants.%Self.ab9) {}
// CHECK:STDOUT:
@@ -210,29 +210,29 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; }
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface> [concrete]
// CHECK:STDOUT: %Self.f87: %Interface.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %C: type = class_type @C, @C(%Self.f87) [symbolic]
// CHECK:STDOUT: %pattern_type.bc5: type = pattern_type %C [symbolic]
// CHECK:STDOUT: %Self.887: %Interface.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %C: type = class_type @C, @C(%Self.887) [symbolic]
// CHECK:STDOUT: %pattern_type.68e: type = pattern_type %C [symbolic]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %U.091: type = symbolic_binding U, 1 [symbolic]
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %ptr.18e: type = ptr_type %U.091 [symbolic]
// CHECK:STDOUT: %pattern_type.423: type = pattern_type %ptr.18e [symbolic]
// CHECK:STDOUT: %C.F.type: type = fn_type @C.F, @C(%Self.f87) [symbolic]
// CHECK:STDOUT: %C.F.type: type = fn_type @C.F, @C(%Self.887) [symbolic]
// CHECK:STDOUT: %C.F: %C.F.type = struct_value () [symbolic]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %require_complete.56d: <witness> = require_complete_type %ptr.18e [symbolic]
// CHECK:STDOUT: %require_complete.79e: <witness> = require_complete_type %C [symbolic]
// CHECK:STDOUT: %require_complete.03c: <witness> = require_complete_type %C [symbolic]
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
// CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete]
// CHECK:STDOUT: %.2bd: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.091) [symbolic]
// CHECK:STDOUT: %.f1d: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.091) [symbolic]
// CHECK:STDOUT: %Copy.lookup_impl_witness.484: <witness> = lookup_impl_witness %ptr.18e, @Copy [symbolic]
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.18e, (%Copy.lookup_impl_witness.484) [symbolic]
// CHECK:STDOUT: %.4ef: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [symbolic]
// CHECK:STDOUT: %impl.elem0.caa: %.4ef = impl_witness_access %Copy.lookup_impl_witness.484, element0 [symbolic]
// CHECK:STDOUT: %specific_impl_fn.8e3: <specific function> = specific_impl_function %impl.elem0.caa, @Copy.Op(%Copy.facet) [symbolic]
// CHECK:STDOUT: %.ee1: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [symbolic]
// CHECK:STDOUT: %impl.elem0.d81: %.ee1 = impl_witness_access %Copy.lookup_impl_witness.484, element0 [symbolic]
// CHECK:STDOUT: %specific_impl_fn.9f4: <specific function> = specific_impl_function %impl.elem0.d81, @Copy.Op(%Copy.facet) [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -252,8 +252,8 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; }
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %Interface.decl: type = interface_decl @Interface [concrete = constants.%Interface.type] {} {}
// CHECK:STDOUT: %C.F.decl: %C.F.type = fn_decl @C.F [symbolic = constants.%C.F] {
// CHECK:STDOUT: %self.patt: @C.F.%pattern_type.loc14_10 (%pattern_type.bc5) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @C.F.%pattern_type.loc14_10 (%pattern_type.bc5) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @C.F.%pattern_type.loc14_10 (%pattern_type.68e) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @C.F.%pattern_type.loc14_10 (%pattern_type.68e) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete]
// CHECK:STDOUT: %u.patt: @C.F.%pattern_type.loc14_32 (%pattern_type.423) = value_binding_pattern u [concrete]
// CHECK:STDOUT: %u.param_patt: @C.F.%pattern_type.loc14_32 (%pattern_type.423) = value_param_pattern %u.patt, call_param1 [concrete]
@@ -264,7 +264,7 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; }
// CHECK:STDOUT: %ptr.loc20_51: type = ptr_type %U.ref.loc20_50 [symbolic = %ptr.loc14_36.1 (constants.%ptr.18e)]
// CHECK:STDOUT: %self.param.loc20: @C.F.%C (%C) = value_param call_param0
// CHECK:STDOUT: %.loc20_24.1: type = splice_block %Self.ref.loc20 [symbolic = %C (constants.%C)] {
// CHECK:STDOUT: %.loc20_24.2: type = specific_constant constants.%C, @C(constants.%Self.f87) [symbolic = %C (constants.%C)]
// CHECK:STDOUT: %.loc20_24.2: type = specific_constant constants.%C, @C(constants.%Self.887) [symbolic = %C (constants.%C)]
// CHECK:STDOUT: %Self.ref.loc20: type = name_ref Self, %.loc20_24.2 [symbolic = %C (constants.%C)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self.loc20: @C.F.%C (%C) = value_binding self, %self.param.loc20
@@ -282,7 +282,7 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Interface {
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = constants.%Self.f87]
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = constants.%Self.887]
// CHECK:STDOUT: %C.decl: type = class_decl @C [symbolic = constants.%C] {} {}
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
@@ -295,14 +295,14 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; }
// CHECK:STDOUT:
// CHECK:STDOUT: generic class @C(@Interface.%Self: %Interface.type) {
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.f87)]
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.887)]
// CHECK:STDOUT: %C.F.type: type = fn_type @C.F, @C(%Self) [symbolic = %C.F.type (constants.%C.F.type)]
// CHECK:STDOUT: %C.F: @C.%C.F.type (%C.F.type) = struct_value () [symbolic = %C.F (constants.%C.F)]
// CHECK:STDOUT:
// CHECK:STDOUT: class {
// CHECK:STDOUT: %C.F.decl: @C.%C.F.type (%C.F.type) = fn_decl @C.F [symbolic = @C.%C.F (constants.%C.F)] {
// CHECK:STDOUT: %self.patt: @C.F.%pattern_type.loc14_10 (%pattern_type.bc5) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @C.F.%pattern_type.loc14_10 (%pattern_type.bc5) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @C.F.%pattern_type.loc14_10 (%pattern_type.68e) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @C.F.%pattern_type.loc14_10 (%pattern_type.68e) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %U.patt: %pattern_type.98f = symbolic_binding_pattern U, 1 [concrete]
// CHECK:STDOUT: %u.patt: @C.F.%pattern_type.loc14_32 (%pattern_type.423) = value_binding_pattern u [concrete]
// CHECK:STDOUT: %u.param_patt: @C.F.%pattern_type.loc14_32 (%pattern_type.423) = value_param_pattern %u.patt, call_param1 [concrete]
@@ -313,7 +313,7 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; }
// CHECK:STDOUT: %ptr.loc14_43: type = ptr_type %U.ref.loc14_42 [symbolic = %ptr.loc14_36.1 (constants.%ptr.18e)]
// CHECK:STDOUT: %self.param.loc14: @C.F.%C (%C) = value_param call_param0
// CHECK:STDOUT: %.loc14_16.1: type = splice_block %Self.ref.loc14 [symbolic = %C (constants.%C)] {
// CHECK:STDOUT: %.loc14_16.2: type = specific_constant constants.%C, @C(constants.%Self.f87) [symbolic = %C (constants.%C)]
// CHECK:STDOUT: %.loc14_16.2: type = specific_constant constants.%C, @C(constants.%Self.887) [symbolic = %C (constants.%C)]
// CHECK:STDOUT: %Self.ref.loc14: type = name_ref Self, %.loc14_16.2 [symbolic = %C (constants.%C)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %self.loc14: @C.F.%C (%C) = value_binding self, %self.param.loc14
@@ -338,46 +338,46 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @C.F(@Interface.%Self: %Interface.type, %U.loc14_22.2: type) {
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.f87)]
// CHECK:STDOUT: %Self: %Interface.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.887)]
// CHECK:STDOUT: %C: type = class_type @C, @C(%Self) [symbolic = %C (constants.%C)]
// CHECK:STDOUT: %pattern_type.loc14_10: type = pattern_type %C [symbolic = %pattern_type.loc14_10 (constants.%pattern_type.bc5)]
// CHECK:STDOUT: %pattern_type.loc14_10: type = pattern_type %C [symbolic = %pattern_type.loc14_10 (constants.%pattern_type.68e)]
// CHECK:STDOUT: %U.loc14_22.1: type = symbolic_binding U, 1 [symbolic = %U.loc14_22.1 (constants.%U.091)]
// CHECK:STDOUT: %ptr.loc14_36.1: type = ptr_type %U.loc14_22.1 [symbolic = %ptr.loc14_36.1 (constants.%ptr.18e)]
// CHECK:STDOUT: %pattern_type.loc14_32: type = pattern_type %ptr.loc14_36.1 [symbolic = %pattern_type.loc14_32 (constants.%pattern_type.423)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete.loc20_51: <witness> = require_complete_type %ptr.loc14_36.1 [symbolic = %require_complete.loc20_51 (constants.%require_complete.56d)]
// CHECK:STDOUT: %require_complete.loc20_22: <witness> = require_complete_type %C [symbolic = %require_complete.loc20_22 (constants.%require_complete.79e)]
// CHECK:STDOUT: %.loc20_62.1: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.loc14_22.1) [symbolic = %.loc20_62.1 (constants.%.2bd)]
// CHECK:STDOUT: %require_complete.loc20_22: <witness> = require_complete_type %C [symbolic = %require_complete.loc20_22 (constants.%require_complete.03c)]
// CHECK:STDOUT: %.loc20_62.1: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%U.loc14_22.1) [symbolic = %.loc20_62.1 (constants.%.f1d)]
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc14_36.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.484)]
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.loc14_36.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet (constants.%Copy.facet)]
// CHECK:STDOUT: %.loc20_62.2: type = fn_type_with_self_type constants.%Copy.Op.type, %Copy.facet [symbolic = %.loc20_62.2 (constants.%.4ef)]
// CHECK:STDOUT: %impl.elem0.loc20_62.2: @C.F.%.loc20_62.2 (%.4ef) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc20_62.2 (constants.%impl.elem0.caa)]
// CHECK:STDOUT: %specific_impl_fn.loc20_62.2: <specific function> = specific_impl_function %impl.elem0.loc20_62.2, @Copy.Op(%Copy.facet) [symbolic = %specific_impl_fn.loc20_62.2 (constants.%specific_impl_fn.8e3)]
// CHECK:STDOUT: %.loc20_62.2: type = fn_type_with_self_type constants.%Copy.Op.type, %Copy.facet [symbolic = %.loc20_62.2 (constants.%.ee1)]
// CHECK:STDOUT: %impl.elem0.loc20_62.2: @C.F.%.loc20_62.2 (%.ee1) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc20_62.2 (constants.%impl.elem0.d81)]
// CHECK:STDOUT: %specific_impl_fn.loc20_62.2: <specific function> = specific_impl_function %impl.elem0.loc20_62.2, @Copy.Op(%Copy.facet) [symbolic = %specific_impl_fn.loc20_62.2 (constants.%specific_impl_fn.9f4)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param.loc20: @C.F.%C (%C), %u.param.loc20: @C.F.%ptr.loc14_36.1 (%ptr.18e)) -> @C.F.%ptr.loc14_36.1 (%ptr.18e) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %u.ref: @C.F.%ptr.loc14_36.1 (%ptr.18e) = name_ref u, %u.loc20
// CHECK:STDOUT: %impl.elem0.loc20_62.1: @C.F.%.loc20_62.2 (%.4ef) = impl_witness_access constants.%Copy.lookup_impl_witness.484, element0 [symbolic = %impl.elem0.loc20_62.2 (constants.%impl.elem0.caa)]
// CHECK:STDOUT: %impl.elem0.loc20_62.1: @C.F.%.loc20_62.2 (%.ee1) = impl_witness_access constants.%Copy.lookup_impl_witness.484, element0 [symbolic = %impl.elem0.loc20_62.2 (constants.%impl.elem0.d81)]
// CHECK:STDOUT: %bound_method.loc20_62.1: <bound method> = bound_method %u.ref, %impl.elem0.loc20_62.1
// CHECK:STDOUT: %specific_impl_fn.loc20_62.1: <specific function> = specific_impl_function %impl.elem0.loc20_62.1, @Copy.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc20_62.2 (constants.%specific_impl_fn.8e3)]
// CHECK:STDOUT: %specific_impl_fn.loc20_62.1: <specific function> = specific_impl_function %impl.elem0.loc20_62.1, @Copy.Op(constants.%Copy.facet) [symbolic = %specific_impl_fn.loc20_62.2 (constants.%specific_impl_fn.9f4)]
// CHECK:STDOUT: %bound_method.loc20_62.2: <bound method> = bound_method %u.ref, %specific_impl_fn.loc20_62.1
// CHECK:STDOUT: %Copy.Op.call: init @C.F.%ptr.loc14_36.1 (%ptr.18e) = call %bound_method.loc20_62.2(%u.ref)
// CHECK:STDOUT: return %Copy.Op.call to %return.loc20
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C(constants.%Self.f87) {
// CHECK:STDOUT: specific @C(constants.%Self.887) {
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Self => constants.%Self.f87
// CHECK:STDOUT: %Self => constants.%Self.887
// CHECK:STDOUT: %C.F.type => constants.%C.F.type
// CHECK:STDOUT: %C.F => constants.%C.F
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C.F(constants.%Self.f87, constants.%U.091) {
// CHECK:STDOUT: %Self => constants.%Self.f87
// CHECK:STDOUT: specific @C.F(constants.%Self.887, constants.%U.091) {
// CHECK:STDOUT: %Self => constants.%Self.887
// CHECK:STDOUT: %C => constants.%C
// CHECK:STDOUT: %pattern_type.loc14_10 => constants.%pattern_type.bc5
// CHECK:STDOUT: %pattern_type.loc14_10 => constants.%pattern_type.68e
// CHECK:STDOUT: %U.loc14_22.1 => constants.%U.091
// CHECK:STDOUT: %ptr.loc14_36.1 => constants.%ptr.18e
// CHECK:STDOUT: %pattern_type.loc14_32 => constants.%pattern_type.423
+101 -101
View File
@@ -32,36 +32,36 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self.dba: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.ab9: %I.type = symbolic_binding Self, 0 [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]
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%I.F.decl [concrete]
// CHECK:STDOUT: %J.type: type = facet_type <@J> [concrete]
// CHECK:STDOUT: %Self.da6: %J.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.8a1: %J.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %T.a68: %J.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.70b: type = pattern_type %J.type [concrete]
// CHECK:STDOUT: %T.binding.as_type.735: type = symbolic_binding_type T, 0, %T.a68 [symbolic]
// CHECK:STDOUT: %I.impl_witness.234: <witness> = impl_witness @T.binding.as_type.as.I.impl.%I.impl_witness_table, @T.binding.as_type.as.I.impl(%T.a68) [symbolic]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type.746: type = fn_type @T.binding.as_type.as.I.impl.F, @T.binding.as_type.as.I.impl(%T.a68) [symbolic]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.5ca: %T.binding.as_type.as.I.impl.F.type.746 = struct_value () [symbolic]
// CHECK:STDOUT: %I.facet.077: %I.type = facet_value %T.binding.as_type.735, (%I.impl_witness.234) [symbolic]
// CHECK:STDOUT: %T.50f: %I.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.a15: type = pattern_type %I.type [concrete]
// CHECK:STDOUT: %T.612: %J.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.f76: type = pattern_type %J.type [concrete]
// CHECK:STDOUT: %T.binding.as_type.50b: type = symbolic_binding_type T, 0, %T.612 [symbolic]
// CHECK:STDOUT: %I.impl_witness.ada: <witness> = impl_witness @T.binding.as_type.as.I.impl.%I.impl_witness_table, @T.binding.as_type.as.I.impl(%T.612) [symbolic]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type.060: type = fn_type @T.binding.as_type.as.I.impl.F, @T.binding.as_type.as.I.impl(%T.612) [symbolic]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.ded: %T.binding.as_type.as.I.impl.F.type.060 = struct_value () [symbolic]
// CHECK:STDOUT: %I.facet.af5: %I.type = facet_value %T.binding.as_type.50b, (%I.impl_witness.ada) [symbolic]
// CHECK:STDOUT: %T.651: %I.type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.9d9: type = pattern_type %I.type [concrete]
// CHECK:STDOUT: %UseI.type: type = fn_type @UseI [concrete]
// CHECK:STDOUT: %UseI: %UseI.type = struct_value () [concrete]
// CHECK:STDOUT: %T.binding.as_type.419: type = symbolic_binding_type T, 0, %T.50f [symbolic]
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %T.50f, @I [symbolic]
// CHECK:STDOUT: %.766: type = fn_type_with_self_type %I.F.type, %T.50f [symbolic]
// CHECK:STDOUT: %impl.elem0: %.766 = impl_witness_access %I.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %specific_impl_fn: <specific function> = specific_impl_function %impl.elem0, @I.F(%T.50f) [symbolic]
// CHECK:STDOUT: %T.binding.as_type.3af: type = symbolic_binding_type T, 0, %T.651 [symbolic]
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %T.651, @I [symbolic]
// CHECK:STDOUT: %.354: type = fn_type_with_self_type %I.F.type, %T.651 [symbolic]
// CHECK:STDOUT: %impl.elem0: %.354 = impl_witness_access %I.lookup_impl_witness, element0 [symbolic]
// CHECK:STDOUT: %specific_impl_fn: <specific function> = specific_impl_function %impl.elem0, @I.F(%T.651) [symbolic]
// CHECK:STDOUT: %UseJ.type: type = fn_type @UseJ [concrete]
// CHECK:STDOUT: %UseJ: %UseJ.type = struct_value () [concrete]
// CHECK:STDOUT: %.5bd: require_specific_def_type = require_specific_def @T.binding.as_type.as.I.impl(%T.a68) [symbolic]
// CHECK:STDOUT: %UseI.specific_fn.8ea: <specific function> = specific_function %UseI, @UseI(%I.facet.077) [symbolic]
// CHECK:STDOUT: %.f66: require_specific_def_type = require_specific_def @T.binding.as_type.as.I.impl(%T.612) [symbolic]
// CHECK:STDOUT: %UseI.specific_fn.5d2: <specific function> = specific_function %UseI, @UseI(%I.facet.af5) [symbolic]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
@@ -70,16 +70,16 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT: %Use: %Use.type = struct_value () [concrete]
// CHECK:STDOUT: %J.facet: %J.type = facet_value %C, (%J.impl_witness) [concrete]
// CHECK:STDOUT: %UseJ.specific_fn: <specific function> = specific_function %UseJ, @UseJ(%J.facet) [concrete]
// CHECK:STDOUT: %.fdb: type = fn_type_with_self_type %I.F.type, %I.facet.077 [symbolic]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.specific_fn.0af: <specific function> = specific_function %T.binding.as_type.as.I.impl.F.5ca, @T.binding.as_type.as.I.impl.F(%T.a68) [symbolic]
// CHECK:STDOUT: %I.impl_witness.3e0: <witness> = impl_witness @T.binding.as_type.as.I.impl.%I.impl_witness_table, @T.binding.as_type.as.I.impl(%J.facet) [concrete]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type.479: type = fn_type @T.binding.as_type.as.I.impl.F, @T.binding.as_type.as.I.impl(%J.facet) [concrete]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.bac: %T.binding.as_type.as.I.impl.F.type.479 = struct_value () [concrete]
// CHECK:STDOUT: %.ac1: require_specific_def_type = require_specific_def @T.binding.as_type.as.I.impl(%J.facet) [concrete]
// CHECK:STDOUT: %I.facet.744: %I.type = facet_value %C, (%I.impl_witness.3e0) [concrete]
// CHECK:STDOUT: %UseI.specific_fn.3c7: <specific function> = specific_function %UseI, @UseI(%I.facet.744) [concrete]
// CHECK:STDOUT: %.1e8: type = fn_type_with_self_type %I.F.type, %I.facet.744 [concrete]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.specific_fn.0b8: <specific function> = specific_function %T.binding.as_type.as.I.impl.F.bac, @T.binding.as_type.as.I.impl.F(%J.facet) [concrete]
// CHECK:STDOUT: %.e68: type = fn_type_with_self_type %I.F.type, %I.facet.af5 [symbolic]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.specific_fn.95b: <specific function> = specific_function %T.binding.as_type.as.I.impl.F.ded, @T.binding.as_type.as.I.impl.F(%T.612) [symbolic]
// CHECK:STDOUT: %I.impl_witness.9a0: <witness> = impl_witness @T.binding.as_type.as.I.impl.%I.impl_witness_table, @T.binding.as_type.as.I.impl(%J.facet) [concrete]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type.9f7: type = fn_type @T.binding.as_type.as.I.impl.F, @T.binding.as_type.as.I.impl(%J.facet) [concrete]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.698: %T.binding.as_type.as.I.impl.F.type.9f7 = struct_value () [concrete]
// CHECK:STDOUT: %.d61: require_specific_def_type = require_specific_def @T.binding.as_type.as.I.impl(%J.facet) [concrete]
// CHECK:STDOUT: %I.facet.2df: %I.type = facet_value %C, (%I.impl_witness.9a0) [concrete]
// CHECK:STDOUT: %UseI.specific_fn.163: <specific function> = specific_function %UseI, @UseI(%I.facet.2df) [concrete]
// CHECK:STDOUT: %.9fc: type = fn_type_with_self_type %I.F.type, %I.facet.2df [concrete]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.specific_fn.78c: <specific function> = specific_function %T.binding.as_type.as.I.impl.F.698, @T.binding.as_type.as.I.impl.F(%J.facet) [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -103,35 +103,35 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT: %I.decl: type = interface_decl @I [concrete = constants.%I.type] {} {}
// CHECK:STDOUT: %J.decl: type = interface_decl @J [concrete = constants.%J.type] {} {}
// CHECK:STDOUT: impl_decl @T.binding.as_type.as.I.impl [concrete] {
// CHECK:STDOUT: %T.patt: %pattern_type.70b = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.f76 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: %J.type = name_ref T, %T.loc7_20.2 [symbolic = %T.loc7_20.1 (constants.%T.a68)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type.735)]
// CHECK:STDOUT: %.loc7_27: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type.735)]
// CHECK:STDOUT: %T.ref: %J.type = name_ref T, %T.loc7_20.2 [symbolic = %T.loc7_20.1 (constants.%T.612)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type.50b)]
// CHECK:STDOUT: %.loc7_27: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type.50b)]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: %.loc7_24: type = splice_block %J.ref [concrete = constants.%J.type] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc7_20.2: %J.type = symbolic_binding T, 0 [symbolic = %T.loc7_20.1 (constants.%T.a68)]
// CHECK:STDOUT: %T.loc7_20.2: %J.type = symbolic_binding T, 0 [symbolic = %T.loc7_20.1 (constants.%T.612)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %UseI.decl: %UseI.type = fn_decl @UseI [concrete = constants.%UseI] {
// CHECK:STDOUT: %T.patt: %pattern_type.a15 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.9d9 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc11_13: type = splice_block %I.ref [concrete = constants.%I.type] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc11_9.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc11_9.1 (constants.%T.50f)]
// CHECK:STDOUT: %T.loc11_9.2: %I.type = symbolic_binding T, 0 [symbolic = %T.loc11_9.1 (constants.%T.651)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %UseJ.decl: %UseJ.type = fn_decl @UseJ [concrete = constants.%UseJ] {
// CHECK:STDOUT: %T.patt: %pattern_type.70b = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.f76 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc12_13: type = splice_block %J.ref [concrete = constants.%J.type] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc12_9.2: %J.type = symbolic_binding T, 0 [symbolic = %T.loc12_9.1 (constants.%T.a68)]
// CHECK:STDOUT: %T.loc12_9.2: %J.type = symbolic_binding T, 0 [symbolic = %T.loc12_9.1 (constants.%T.612)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {}
// CHECK:STDOUT: impl_decl @C.as.J.impl [concrete] {} {
@@ -142,7 +142,7 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.dba]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.ab9]
// CHECK:STDOUT: %I.F.decl: %I.F.type = fn_decl @I.F [concrete = constants.%I.F] {} {}
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0]
// CHECK:STDOUT:
@@ -155,7 +155,7 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @J {
// CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = constants.%Self.da6]
// CHECK:STDOUT: %Self: %J.type = symbolic_binding Self, 0 [symbolic = constants.%Self.8a1]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -165,18 +165,18 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic impl @T.binding.as_type.as.I.impl(%T.loc7_20.2: %J.type) {
// CHECK:STDOUT: %T.loc7_20.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc7_20.1 (constants.%T.a68)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc7_20.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type.735)]
// CHECK:STDOUT: %I.impl_witness.loc7_34.2: <witness> = impl_witness %I.impl_witness_table, @T.binding.as_type.as.I.impl(%T.loc7_20.1) [symbolic = %I.impl_witness.loc7_34.2 (constants.%I.impl_witness.234)]
// CHECK:STDOUT: %T.loc7_20.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc7_20.1 (constants.%T.612)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc7_20.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type.50b)]
// CHECK:STDOUT: %I.impl_witness.loc7_34.2: <witness> = impl_witness %I.impl_witness_table, @T.binding.as_type.as.I.impl(%T.loc7_20.1) [symbolic = %I.impl_witness.loc7_34.2 (constants.%I.impl_witness.ada)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type: type = fn_type @T.binding.as_type.as.I.impl.F, @T.binding.as_type.as.I.impl(%T.loc7_20.1) [symbolic = %T.binding.as_type.as.I.impl.F.type (constants.%T.binding.as_type.as.I.impl.F.type.746)]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F: @T.binding.as_type.as.I.impl.%T.binding.as_type.as.I.impl.F.type (%T.binding.as_type.as.I.impl.F.type.746) = struct_value () [symbolic = %T.binding.as_type.as.I.impl.F (constants.%T.binding.as_type.as.I.impl.F.5ca)]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type: type = fn_type @T.binding.as_type.as.I.impl.F, @T.binding.as_type.as.I.impl(%T.loc7_20.1) [symbolic = %T.binding.as_type.as.I.impl.F.type (constants.%T.binding.as_type.as.I.impl.F.type.060)]
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F: @T.binding.as_type.as.I.impl.%T.binding.as_type.as.I.impl.F.type (%T.binding.as_type.as.I.impl.F.type.060) = struct_value () [symbolic = %T.binding.as_type.as.I.impl.F (constants.%T.binding.as_type.as.I.impl.F.ded)]
// CHECK:STDOUT:
// CHECK:STDOUT: impl: %.loc7_27 as %I.ref {
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.decl: @T.binding.as_type.as.I.impl.%T.binding.as_type.as.I.impl.F.type (%T.binding.as_type.as.I.impl.F.type.746) = fn_decl @T.binding.as_type.as.I.impl.F [symbolic = @T.binding.as_type.as.I.impl.%T.binding.as_type.as.I.impl.F (constants.%T.binding.as_type.as.I.impl.F.5ca)] {} {}
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.decl: @T.binding.as_type.as.I.impl.%T.binding.as_type.as.I.impl.F.type (%T.binding.as_type.as.I.impl.F.type.060) = fn_decl @T.binding.as_type.as.I.impl.F [symbolic = @T.binding.as_type.as.I.impl.%T.binding.as_type.as.I.impl.F (constants.%T.binding.as_type.as.I.impl.F.ded)] {} {}
// CHECK:STDOUT: %I.impl_witness_table = impl_witness_table (%T.binding.as_type.as.I.impl.F.decl), @T.binding.as_type.as.I.impl [concrete]
// CHECK:STDOUT: %I.impl_witness.loc7_34.1: <witness> = impl_witness %I.impl_witness_table, @T.binding.as_type.as.I.impl(constants.%T.a68) [symbolic = %I.impl_witness.loc7_34.2 (constants.%I.impl_witness.234)]
// CHECK:STDOUT: %I.impl_witness.loc7_34.1: <witness> = impl_witness %I.impl_witness_table, @T.binding.as_type.as.I.impl(constants.%T.612) [symbolic = %I.impl_witness.loc7_34.2 (constants.%I.impl_witness.ada)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .F = %T.binding.as_type.as.I.impl.F.decl
@@ -214,46 +214,46 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @UseI(%T.loc11_9.2: %I.type) {
// CHECK:STDOUT: %T.loc11_9.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc11_9.1 (constants.%T.50f)]
// CHECK:STDOUT: %T.loc11_9.1: %I.type = symbolic_binding T, 0 [symbolic = %T.loc11_9.1 (constants.%T.651)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc11_9.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type.419)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc11_9.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type.3af)]
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %T.loc11_9.1, @I [symbolic = %I.lookup_impl_witness (constants.%I.lookup_impl_witness)]
// CHECK:STDOUT: %.loc11_19.2: type = fn_type_with_self_type constants.%I.F.type, %T.loc11_9.1 [symbolic = %.loc11_19.2 (constants.%.766)]
// CHECK:STDOUT: %impl.elem0.loc11_19.2: @UseI.%.loc11_19.2 (%.766) = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_19.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %.loc11_19.2: type = fn_type_with_self_type constants.%I.F.type, %T.loc11_9.1 [symbolic = %.loc11_19.2 (constants.%.354)]
// CHECK:STDOUT: %impl.elem0.loc11_19.2: @UseI.%.loc11_19.2 (%.354) = impl_witness_access %I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_19.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc11_19.2: <specific function> = specific_impl_function %impl.elem0.loc11_19.2, @I.F(%T.loc11_9.1) [symbolic = %specific_impl_fn.loc11_19.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %T.ref: %I.type = name_ref T, %T.loc11_9.2 [symbolic = %T.loc11_9.1 (constants.%T.50f)]
// CHECK:STDOUT: %T.ref: %I.type = name_ref T, %T.loc11_9.2 [symbolic = %T.loc11_9.1 (constants.%T.651)]
// CHECK:STDOUT: %F.ref: %I.assoc_type = name_ref F, @I.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type.419)]
// CHECK:STDOUT: %.loc11_19.1: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type.419)]
// CHECK:STDOUT: %impl.elem0.loc11_19.1: @UseI.%.loc11_19.2 (%.766) = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_19.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc11_19.1: <specific function> = specific_impl_function %impl.elem0.loc11_19.1, @I.F(constants.%T.50f) [symbolic = %specific_impl_fn.loc11_19.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type.3af)]
// CHECK:STDOUT: %.loc11_19.1: type = converted %T.ref, %T.as_type [symbolic = %T.binding.as_type (constants.%T.binding.as_type.3af)]
// CHECK:STDOUT: %impl.elem0.loc11_19.1: @UseI.%.loc11_19.2 (%.354) = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc11_19.2 (constants.%impl.elem0)]
// CHECK:STDOUT: %specific_impl_fn.loc11_19.1: <specific function> = specific_impl_function %impl.elem0.loc11_19.1, @I.F(constants.%T.651) [symbolic = %specific_impl_fn.loc11_19.2 (constants.%specific_impl_fn)]
// CHECK:STDOUT: %I.F.call: init %empty_tuple.type = call %specific_impl_fn.loc11_19.1()
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @UseJ(%T.loc12_9.2: %J.type) {
// CHECK:STDOUT: %T.loc12_9.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc12_9.1 (constants.%T.a68)]
// CHECK:STDOUT: %T.loc12_9.1: %J.type = symbolic_binding T, 0 [symbolic = %T.loc12_9.1 (constants.%T.612)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc12_9.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type.735)]
// CHECK:STDOUT: %.loc12_24.2: require_specific_def_type = require_specific_def @T.binding.as_type.as.I.impl(%T.loc12_9.1) [symbolic = %.loc12_24.2 (constants.%.5bd)]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @T.binding.as_type.as.I.impl.%I.impl_witness_table, @T.binding.as_type.as.I.impl(%T.loc12_9.1) [symbolic = %I.impl_witness (constants.%I.impl_witness.234)]
// CHECK:STDOUT: %I.facet.loc12_24.2: %I.type = facet_value %T.binding.as_type, (%I.impl_witness) [symbolic = %I.facet.loc12_24.2 (constants.%I.facet.077)]
// CHECK:STDOUT: %UseI.specific_fn.loc12_18.2: <specific function> = specific_function constants.%UseI, @UseI(%I.facet.loc12_24.2) [symbolic = %UseI.specific_fn.loc12_18.2 (constants.%UseI.specific_fn.8ea)]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.loc12_9.1 [symbolic = %T.binding.as_type (constants.%T.binding.as_type.50b)]
// CHECK:STDOUT: %.loc12_24.2: require_specific_def_type = require_specific_def @T.binding.as_type.as.I.impl(%T.loc12_9.1) [symbolic = %.loc12_24.2 (constants.%.f66)]
// CHECK:STDOUT: %I.impl_witness: <witness> = impl_witness @T.binding.as_type.as.I.impl.%I.impl_witness_table, @T.binding.as_type.as.I.impl(%T.loc12_9.1) [symbolic = %I.impl_witness (constants.%I.impl_witness.ada)]
// CHECK:STDOUT: %I.facet.loc12_24.2: %I.type = facet_value %T.binding.as_type, (%I.impl_witness) [symbolic = %I.facet.loc12_24.2 (constants.%I.facet.af5)]
// CHECK:STDOUT: %UseI.specific_fn.loc12_18.2: <specific function> = specific_function constants.%UseI, @UseI(%I.facet.loc12_24.2) [symbolic = %UseI.specific_fn.loc12_18.2 (constants.%UseI.specific_fn.5d2)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %UseI.ref: %UseI.type = name_ref UseI, file.%UseI.decl [concrete = constants.%UseI]
// CHECK:STDOUT: %T.ref: %J.type = name_ref T, %T.loc12_9.2 [symbolic = %T.loc12_9.1 (constants.%T.a68)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type.735)]
// CHECK:STDOUT: %I.facet.loc12_24.1: %I.type = facet_value %T.as_type, (constants.%I.impl_witness.234) [symbolic = %I.facet.loc12_24.2 (constants.%I.facet.077)]
// CHECK:STDOUT: %.loc12_24.1: %I.type = converted %T.ref, %I.facet.loc12_24.1 [symbolic = %I.facet.loc12_24.2 (constants.%I.facet.077)]
// CHECK:STDOUT: %UseI.specific_fn.loc12_18.1: <specific function> = specific_function %UseI.ref, @UseI(constants.%I.facet.077) [symbolic = %UseI.specific_fn.loc12_18.2 (constants.%UseI.specific_fn.8ea)]
// CHECK:STDOUT: %T.ref: %J.type = name_ref T, %T.loc12_9.2 [symbolic = %T.loc12_9.1 (constants.%T.612)]
// CHECK:STDOUT: %T.as_type: type = facet_access_type %T.ref [symbolic = %T.binding.as_type (constants.%T.binding.as_type.50b)]
// CHECK:STDOUT: %I.facet.loc12_24.1: %I.type = facet_value %T.as_type, (constants.%I.impl_witness.ada) [symbolic = %I.facet.loc12_24.2 (constants.%I.facet.af5)]
// CHECK:STDOUT: %.loc12_24.1: %I.type = converted %T.ref, %I.facet.loc12_24.1 [symbolic = %I.facet.loc12_24.2 (constants.%I.facet.af5)]
// CHECK:STDOUT: %UseI.specific_fn.loc12_18.1: <specific function> = specific_function %UseI.ref, @UseI(constants.%I.facet.af5) [symbolic = %UseI.specific_fn.loc12_18.2 (constants.%UseI.specific_fn.5d2)]
// CHECK:STDOUT: %UseI.call: init %empty_tuple.type = call %UseI.specific_fn.loc12_18.1()
// CHECK:STDOUT: return
// CHECK:STDOUT: }
@@ -270,43 +270,43 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT: return
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self.dba) {}
// CHECK:STDOUT: specific @I.F(constants.%Self.ab9) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T.binding.as_type.as.I.impl(constants.%T.a68) {
// CHECK:STDOUT: %T.loc7_20.1 => constants.%T.a68
// CHECK:STDOUT: %T.binding.as_type => constants.%T.binding.as_type.735
// CHECK:STDOUT: %I.impl_witness.loc7_34.2 => constants.%I.impl_witness.234
// CHECK:STDOUT: specific @T.binding.as_type.as.I.impl(constants.%T.612) {
// CHECK:STDOUT: %T.loc7_20.1 => constants.%T.612
// CHECK:STDOUT: %T.binding.as_type => constants.%T.binding.as_type.50b
// CHECK:STDOUT: %I.impl_witness.loc7_34.2 => constants.%I.impl_witness.ada
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type => constants.%T.binding.as_type.as.I.impl.F.type.746
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F => constants.%T.binding.as_type.as.I.impl.F.5ca
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type => constants.%T.binding.as_type.as.I.impl.F.type.060
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F => constants.%T.binding.as_type.as.I.impl.F.ded
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T.binding.as_type.as.I.impl.F(constants.%T.a68) {
// CHECK:STDOUT: specific @T.binding.as_type.as.I.impl.F(constants.%T.612) {
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%I.facet.077) {}
// CHECK:STDOUT: specific @I.F(constants.%I.facet.af5) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @UseI(constants.%T.50f) {
// CHECK:STDOUT: %T.loc11_9.1 => constants.%T.50f
// CHECK:STDOUT: specific @UseI(constants.%T.651) {
// CHECK:STDOUT: %T.loc11_9.1 => constants.%T.651
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%T.50f) {}
// CHECK:STDOUT: specific @I.F(constants.%T.651) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @UseJ(constants.%T.a68) {
// CHECK:STDOUT: %T.loc12_9.1 => constants.%T.a68
// CHECK:STDOUT: specific @UseJ(constants.%T.612) {
// CHECK:STDOUT: %T.loc12_9.1 => constants.%T.612
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @UseI(constants.%I.facet.077) {
// CHECK:STDOUT: %T.loc11_9.1 => constants.%I.facet.077
// CHECK:STDOUT: specific @UseI(constants.%I.facet.af5) {
// CHECK:STDOUT: %T.loc11_9.1 => constants.%I.facet.af5
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type => constants.%T.binding.as_type.735
// CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.impl_witness.234
// CHECK:STDOUT: %.loc11_19.2 => constants.%.fdb
// CHECK:STDOUT: %impl.elem0.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.5ca
// CHECK:STDOUT: %specific_impl_fn.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.specific_fn.0af
// CHECK:STDOUT: %T.binding.as_type => constants.%T.binding.as_type.50b
// CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.impl_witness.ada
// CHECK:STDOUT: %.loc11_19.2 => constants.%.e68
// CHECK:STDOUT: %impl.elem0.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.ded
// CHECK:STDOUT: %specific_impl_fn.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.specific_fn.95b
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @UseJ(constants.%J.facet) {
@@ -314,34 +314,34 @@ fn Use() { UseJ(C); }
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type => constants.%C
// CHECK:STDOUT: %.loc12_24.2 => constants.%.ac1
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.3e0
// CHECK:STDOUT: %I.facet.loc12_24.2 => constants.%I.facet.744
// CHECK:STDOUT: %UseI.specific_fn.loc12_18.2 => constants.%UseI.specific_fn.3c7
// CHECK:STDOUT: %.loc12_24.2 => constants.%.d61
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.9a0
// CHECK:STDOUT: %I.facet.loc12_24.2 => constants.%I.facet.2df
// CHECK:STDOUT: %UseI.specific_fn.loc12_18.2 => constants.%UseI.specific_fn.163
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T.binding.as_type.as.I.impl(constants.%J.facet) {
// CHECK:STDOUT: %T.loc7_20.1 => constants.%J.facet
// CHECK:STDOUT: %T.binding.as_type => constants.%C
// CHECK:STDOUT: %I.impl_witness.loc7_34.2 => constants.%I.impl_witness.3e0
// CHECK:STDOUT: %I.impl_witness.loc7_34.2 => constants.%I.impl_witness.9a0
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type => constants.%T.binding.as_type.as.I.impl.F.type.479
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F => constants.%T.binding.as_type.as.I.impl.F.bac
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F.type => constants.%T.binding.as_type.as.I.impl.F.type.9f7
// CHECK:STDOUT: %T.binding.as_type.as.I.impl.F => constants.%T.binding.as_type.as.I.impl.F.698
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @UseI(constants.%I.facet.744) {
// CHECK:STDOUT: %T.loc11_9.1 => constants.%I.facet.744
// CHECK:STDOUT: specific @UseI(constants.%I.facet.2df) {
// CHECK:STDOUT: %T.loc11_9.1 => constants.%I.facet.2df
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T.binding.as_type => constants.%C
// CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.impl_witness.3e0
// CHECK:STDOUT: %.loc11_19.2 => constants.%.1e8
// CHECK:STDOUT: %impl.elem0.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.bac
// CHECK:STDOUT: %specific_impl_fn.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.specific_fn.0b8
// CHECK:STDOUT: %I.lookup_impl_witness => constants.%I.impl_witness.9a0
// CHECK:STDOUT: %.loc11_19.2 => constants.%.9fc
// CHECK:STDOUT: %impl.elem0.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.698
// CHECK:STDOUT: %specific_impl_fn.loc11_19.2 => constants.%T.binding.as_type.as.I.impl.F.specific_fn.78c
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%I.facet.744) {}
// CHECK:STDOUT: specific @I.F(constants.%I.facet.2df) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T.binding.as_type.as.I.impl.F(constants.%J.facet) {
// CHECK:STDOUT: !definition:
+81 -81
View File
@@ -86,47 +86,47 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %Simple.type.673: type = generic_interface_type @Simple [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %Simple.generic: %Simple.type.673 = struct_value () [concrete]
// CHECK:STDOUT: %Simple.type.e36: type = facet_type <@Simple, @Simple(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.a6b: %Simple.type.e36 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Simple.type.e29: type = facet_type <@Simple, @Simple(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.862: %Simple.type.e29 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %X: type = class_type @X [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %WithAssocFn.type.daa: type = generic_interface_type @WithAssocFn [concrete]
// CHECK:STDOUT: %WithAssocFn.generic: %WithAssocFn.type.daa = struct_value () [concrete]
// CHECK:STDOUT: %WithAssocFn.type.7eb: type = facet_type <@WithAssocFn, @WithAssocFn(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.54a: %WithAssocFn.type.7eb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %WithAssocFn.type.d36: type = facet_type <@WithAssocFn, @WithAssocFn(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.629: %WithAssocFn.type.d36 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %pattern_type.05f: type = pattern_type %X [concrete]
// CHECK:STDOUT: %WithAssocFn.F.type.b86: type = fn_type @WithAssocFn.F, @WithAssocFn(%T.67d) [symbolic]
// CHECK:STDOUT: %WithAssocFn.F.c8d: %WithAssocFn.F.type.b86 = struct_value () [symbolic]
// CHECK:STDOUT: %WithAssocFn.assoc_type.b93: type = assoc_entity_type @WithAssocFn, @WithAssocFn(%T.67d) [symbolic]
// CHECK:STDOUT: %assoc0.62d: %WithAssocFn.assoc_type.b93 = assoc_entity element0, @WithAssocFn.%WithAssocFn.F.decl [symbolic]
// CHECK:STDOUT: %C: type = class_type @C [concrete]
// CHECK:STDOUT: %Simple.type.1a3: type = facet_type <@Simple, @Simple(%C)> [concrete]
// CHECK:STDOUT: %Simple.type.12a: type = facet_type <@Simple, @Simple(%C)> [concrete]
// CHECK:STDOUT: %Simple.impl_witness: <witness> = impl_witness @C.as.Simple.impl.%Simple.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.25c: %Simple.type.1a3 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %WithAssocFn.type.e28: type = facet_type <@WithAssocFn, @WithAssocFn(%C)> [concrete]
// CHECK:STDOUT: %Self.0b4: %Simple.type.12a = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %WithAssocFn.type.19d: type = facet_type <@WithAssocFn, @WithAssocFn(%C)> [concrete]
// CHECK:STDOUT: %WithAssocFn.impl_witness: <witness> = impl_witness @C.as.WithAssocFn.impl.%WithAssocFn.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.062: %WithAssocFn.type.e28 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.63e: %WithAssocFn.type.19d = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %WithAssocFn.F.type.233: type = fn_type @WithAssocFn.F, @WithAssocFn(%C) [concrete]
// CHECK:STDOUT: %WithAssocFn.F.5a8: %WithAssocFn.F.type.233 = struct_value () [concrete]
// CHECK:STDOUT: %WithAssocFn.assoc_type.cc0: type = assoc_entity_type @WithAssocFn, @WithAssocFn(%C) [concrete]
// CHECK:STDOUT: %assoc0.28f: %WithAssocFn.assoc_type.cc0 = assoc_entity element0, @WithAssocFn.%WithAssocFn.F.decl [concrete]
// CHECK:STDOUT: %C.as.WithAssocFn.impl.F.type: type = fn_type @C.as.WithAssocFn.impl.F [concrete]
// CHECK:STDOUT: %C.as.WithAssocFn.impl.F: %C.as.WithAssocFn.impl.F.type = struct_value () [concrete]
// CHECK:STDOUT: %WithAssocFn.facet: %WithAssocFn.type.e28 = facet_value %C, (%WithAssocFn.impl_witness) [concrete]
// CHECK:STDOUT: %WithAssocFn.facet: %WithAssocFn.type.19d = facet_value %C, (%WithAssocFn.impl_witness) [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %X.val: %X = struct_value () [concrete]
// CHECK:STDOUT: %N: %T.67d = symbolic_binding N, 1 [symbolic]
// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T.67d [symbolic]
// CHECK:STDOUT: %WithImplicitArgs.type: type = generic_interface_type @WithImplicitArgs [concrete]
// CHECK:STDOUT: %WithImplicitArgs.generic: %WithImplicitArgs.type = struct_value () [concrete]
// CHECK:STDOUT: %T.901: %Simple.type.1a3 = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.bc1: type = pattern_type %Simple.type.1a3 [concrete]
// CHECK:STDOUT: %T.760: %Simple.type.12a = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.08a: type = pattern_type %Simple.type.12a [concrete]
// CHECK:STDOUT: %Receive.type: type = fn_type @Receive [concrete]
// CHECK:STDOUT: %Receive: %Receive.type = struct_value () [concrete]
// CHECK:STDOUT: %Pass.type: type = fn_type @Pass [concrete]
// CHECK:STDOUT: %Pass: %Pass.type = struct_value () [concrete]
// CHECK:STDOUT: %Receive.specific_fn: <specific function> = specific_function %Receive, @Receive(%T.901) [symbolic]
// CHECK:STDOUT: %Receive.specific_fn: <specific function> = specific_function %Receive, @Receive(%T.760) [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -166,26 +166,26 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %N.loc22_38.2: @WithImplicitArgs.%T.loc22_28.1 (%T.67d) = symbolic_binding N, 1 [symbolic = %N.loc22_38.1 (constants.%N)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Receive.decl: %Receive.type = fn_decl @Receive [concrete = constants.%Receive] {
// CHECK:STDOUT: %T.patt: %pattern_type.bc1 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.08a = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc24: type = splice_block %Simple.type [concrete = constants.%Simple.type.1a3] {
// CHECK:STDOUT: %.loc24: type = splice_block %Simple.type [concrete = constants.%Simple.type.12a] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Simple.ref: %Simple.type.673 = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.generic]
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(constants.%C)> [concrete = constants.%Simple.type.1a3]
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(constants.%C)> [concrete = constants.%Simple.type.12a]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc24_12.2: %Simple.type.1a3 = symbolic_binding T, 0 [symbolic = %T.loc24_12.1 (constants.%T.901)]
// CHECK:STDOUT: %T.loc24_12.2: %Simple.type.12a = symbolic_binding T, 0 [symbolic = %T.loc24_12.1 (constants.%T.760)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %Pass.decl: %Pass.type = fn_decl @Pass [concrete = constants.%Pass] {
// CHECK:STDOUT: %T.patt: %pattern_type.bc1 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.08a = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc25: type = splice_block %Simple.type [concrete = constants.%Simple.type.1a3] {
// CHECK:STDOUT: %.loc25: type = splice_block %Simple.type [concrete = constants.%Simple.type.12a] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Simple.ref: %Simple.type.673 = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.generic]
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(constants.%C)> [concrete = constants.%Simple.type.1a3]
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(constants.%C)> [concrete = constants.%Simple.type.12a]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc25_9.2: %Simple.type.1a3 = symbolic_binding T, 0 [symbolic = %T.loc25_9.1 (constants.%T.901)]
// CHECK:STDOUT: %T.loc25_9.2: %Simple.type.12a = symbolic_binding T, 0 [symbolic = %T.loc25_9.1 (constants.%T.760)]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -193,11 +193,11 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %T.loc4_18.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_18.1 (constants.%T.67d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(%T.loc4_18.1)> [symbolic = %Simple.type (constants.%Simple.type.e36)]
// CHECK:STDOUT: %Self.loc4_28.2: @Simple.%Simple.type (%Simple.type.e36) = symbolic_binding Self, 1 [symbolic = %Self.loc4_28.2 (constants.%Self.a6b)]
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(%T.loc4_18.1)> [symbolic = %Simple.type (constants.%Simple.type.e29)]
// CHECK:STDOUT: %Self.loc4_28.2: @Simple.%Simple.type (%Simple.type.e29) = symbolic_binding Self, 1 [symbolic = %Self.loc4_28.2 (constants.%Self.862)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc4_28.1: @Simple.%Simple.type (%Simple.type.e36) = symbolic_binding Self, 1 [symbolic = %Self.loc4_28.2 (constants.%Self.a6b)]
// CHECK:STDOUT: %Self.loc4_28.1: @Simple.%Simple.type (%Simple.type.e29) = symbolic_binding Self, 1 [symbolic = %Self.loc4_28.2 (constants.%Self.862)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc4_28.1
@@ -211,15 +211,15 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %T.loc8_23.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_23.1 (constants.%T.67d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %WithAssocFn.type: type = facet_type <@WithAssocFn, @WithAssocFn(%T.loc8_23.1)> [symbolic = %WithAssocFn.type (constants.%WithAssocFn.type.7eb)]
// CHECK:STDOUT: %Self.loc8_33.2: @WithAssocFn.%WithAssocFn.type (%WithAssocFn.type.7eb) = symbolic_binding Self, 1 [symbolic = %Self.loc8_33.2 (constants.%Self.54a)]
// CHECK:STDOUT: %WithAssocFn.type: type = facet_type <@WithAssocFn, @WithAssocFn(%T.loc8_23.1)> [symbolic = %WithAssocFn.type (constants.%WithAssocFn.type.d36)]
// CHECK:STDOUT: %Self.loc8_33.2: @WithAssocFn.%WithAssocFn.type (%WithAssocFn.type.d36) = symbolic_binding Self, 1 [symbolic = %Self.loc8_33.2 (constants.%Self.629)]
// CHECK:STDOUT: %WithAssocFn.F.type: type = fn_type @WithAssocFn.F, @WithAssocFn(%T.loc8_23.1) [symbolic = %WithAssocFn.F.type (constants.%WithAssocFn.F.type.b86)]
// CHECK:STDOUT: %WithAssocFn.F: @WithAssocFn.%WithAssocFn.F.type (%WithAssocFn.F.type.b86) = struct_value () [symbolic = %WithAssocFn.F (constants.%WithAssocFn.F.c8d)]
// CHECK:STDOUT: %WithAssocFn.assoc_type: type = assoc_entity_type @WithAssocFn, @WithAssocFn(%T.loc8_23.1) [symbolic = %WithAssocFn.assoc_type (constants.%WithAssocFn.assoc_type.b93)]
// CHECK:STDOUT: %assoc0.loc10_14.2: @WithAssocFn.%WithAssocFn.assoc_type (%WithAssocFn.assoc_type.b93) = assoc_entity element0, %WithAssocFn.F.decl [symbolic = %assoc0.loc10_14.2 (constants.%assoc0.62d)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc8_33.1: @WithAssocFn.%WithAssocFn.type (%WithAssocFn.type.7eb) = symbolic_binding Self, 1 [symbolic = %Self.loc8_33.2 (constants.%Self.54a)]
// CHECK:STDOUT: %Self.loc8_33.1: @WithAssocFn.%WithAssocFn.type (%WithAssocFn.type.d36) = symbolic_binding Self, 1 [symbolic = %Self.loc8_33.2 (constants.%Self.629)]
// CHECK:STDOUT: %WithAssocFn.F.decl: @WithAssocFn.%WithAssocFn.F.type (%WithAssocFn.F.type.b86) = fn_decl @WithAssocFn.F [symbolic = @WithAssocFn.%WithAssocFn.F (constants.%WithAssocFn.F.c8d)] {
// CHECK:STDOUT: %return.patt: %pattern_type.05f = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.05f = out_param_pattern %return.patt, call_param0 [concrete]
@@ -287,13 +287,13 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %Simple.ref: %Simple.type.673 = name_ref Simple, file.%Simple.decl [concrete = constants.%Simple.generic]
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(constants.%C)> [concrete = constants.%Simple.type.1a3]
// CHECK:STDOUT: %Simple.type: type = facet_type <@Simple, @Simple(constants.%C)> [concrete = constants.%Simple.type.12a]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @C.as.WithAssocFn.impl [concrete] {} {
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C]
// CHECK:STDOUT: %WithAssocFn.ref: %WithAssocFn.type.daa = name_ref WithAssocFn, file.%WithAssocFn.decl [concrete = constants.%WithAssocFn.generic]
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %WithAssocFn.type: type = facet_type <@WithAssocFn, @WithAssocFn(constants.%C)> [concrete = constants.%WithAssocFn.type.e28]
// CHECK:STDOUT: %WithAssocFn.type: type = facet_type <@WithAssocFn, @WithAssocFn(constants.%C)> [concrete = constants.%WithAssocFn.type.19d]
// CHECK:STDOUT: }
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness constants.%empty_struct_type [concrete = constants.%complete_type]
// CHECK:STDOUT: complete_type_witness = %complete_type
@@ -306,7 +306,7 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: .X = <poisoned>
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @WithAssocFn.F(@WithAssocFn.%T.loc8_23.2: type, @WithAssocFn.%Self.loc8_33.1: @WithAssocFn.%WithAssocFn.type (%WithAssocFn.type.7eb)) {
// CHECK:STDOUT: generic fn @WithAssocFn.F(@WithAssocFn.%T.loc8_23.2: type, @WithAssocFn.%Self.loc8_33.1: @WithAssocFn.%WithAssocFn.type (%WithAssocFn.type.d36)) {
// CHECK:STDOUT: fn() -> %return.param: %X;
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -318,8 +318,8 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: return %.loc17_16 to %return
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Receive(%T.loc24_12.2: %Simple.type.1a3) {
// CHECK:STDOUT: %T.loc24_12.1: %Simple.type.1a3 = symbolic_binding T, 0 [symbolic = %T.loc24_12.1 (constants.%T.901)]
// CHECK:STDOUT: generic fn @Receive(%T.loc24_12.2: %Simple.type.12a) {
// CHECK:STDOUT: %T.loc24_12.1: %Simple.type.12a = symbolic_binding T, 0 [symbolic = %T.loc24_12.1 (constants.%T.760)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
@@ -329,8 +329,8 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @Pass(%T.loc25_9.2: %Simple.type.1a3) {
// CHECK:STDOUT: %T.loc25_9.1: %Simple.type.1a3 = symbolic_binding T, 0 [symbolic = %T.loc25_9.1 (constants.%T.901)]
// CHECK:STDOUT: generic fn @Pass(%T.loc25_9.2: %Simple.type.12a) {
// CHECK:STDOUT: %T.loc25_9.1: %Simple.type.12a = symbolic_binding T, 0 [symbolic = %T.loc25_9.1 (constants.%T.760)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Receive.specific_fn.loc26_3.2: <specific function> = specific_function constants.%Receive, @Receive(%T.loc25_9.1) [symbolic = %Receive.specific_fn.loc26_3.2 (constants.%Receive.specific_fn)]
@@ -338,8 +338,8 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: fn() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %Receive.ref: %Receive.type = name_ref Receive, file.%Receive.decl [concrete = constants.%Receive]
// CHECK:STDOUT: %T.ref: %Simple.type.1a3 = name_ref T, %T.loc25_9.2 [symbolic = %T.loc25_9.1 (constants.%T.901)]
// CHECK:STDOUT: %Receive.specific_fn.loc26_3.1: <specific function> = specific_function %Receive.ref, @Receive(constants.%T.901) [symbolic = %Receive.specific_fn.loc26_3.2 (constants.%Receive.specific_fn)]
// CHECK:STDOUT: %T.ref: %Simple.type.12a = name_ref T, %T.loc25_9.2 [symbolic = %T.loc25_9.1 (constants.%T.760)]
// CHECK:STDOUT: %Receive.specific_fn.loc26_3.1: <specific function> = specific_function %Receive.ref, @Receive(constants.%T.760) [symbolic = %Receive.specific_fn.loc26_3.2 (constants.%Receive.specific_fn)]
// CHECK:STDOUT: %Receive.call: init %empty_tuple.type = call %Receive.specific_fn.loc26_3.1()
// CHECK:STDOUT: return
// CHECK:STDOUT: }
@@ -353,22 +353,22 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %T.loc8_23.1 => constants.%T.67d
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @WithAssocFn.F(constants.%T.67d, constants.%Self.54a) {}
// CHECK:STDOUT: specific @WithAssocFn.F(constants.%T.67d, constants.%Self.629) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Simple(constants.%C) {
// CHECK:STDOUT: %T.loc4_18.1 => constants.%C
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Simple.type => constants.%Simple.type.1a3
// CHECK:STDOUT: %Self.loc4_28.2 => constants.%Self.25c
// CHECK:STDOUT: %Simple.type => constants.%Simple.type.12a
// CHECK:STDOUT: %Self.loc4_28.2 => constants.%Self.0b4
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @WithAssocFn(constants.%C) {
// CHECK:STDOUT: %T.loc8_23.1 => constants.%C
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %WithAssocFn.type => constants.%WithAssocFn.type.e28
// CHECK:STDOUT: %Self.loc8_33.2 => constants.%Self.062
// CHECK:STDOUT: %WithAssocFn.type => constants.%WithAssocFn.type.19d
// CHECK:STDOUT: %Self.loc8_33.2 => constants.%Self.63e
// CHECK:STDOUT: %WithAssocFn.F.type => constants.%WithAssocFn.F.type.233
// CHECK:STDOUT: %WithAssocFn.F => constants.%WithAssocFn.F.5a8
// CHECK:STDOUT: %WithAssocFn.assoc_type => constants.%WithAssocFn.assoc_type.cc0
@@ -383,14 +383,14 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.51d
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Receive(constants.%T.901) {
// CHECK:STDOUT: %T.loc24_12.1 => constants.%T.901
// CHECK:STDOUT: specific @Receive(constants.%T.760) {
// CHECK:STDOUT: %T.loc24_12.1 => constants.%T.760
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Pass(constants.%T.901) {
// CHECK:STDOUT: %T.loc25_9.1 => constants.%T.901
// CHECK:STDOUT: specific @Pass(constants.%T.760) {
// CHECK:STDOUT: %T.loc25_9.1 => constants.%T.760
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_mismatched_args.carbon
@@ -402,24 +402,24 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %Generic.type.835: type = generic_interface_type @Generic [concrete]
// CHECK:STDOUT: %Generic.generic: %Generic.type.835 = struct_value () [concrete]
// CHECK:STDOUT: %Generic.type.a3a: type = facet_type <@Generic, @Generic(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.210: %Generic.type.a3a = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.type.03d: type = facet_type <@Generic, @Generic(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.15d: %Generic.type.03d = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %A: type = class_type @A [concrete]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %B: type = class_type @B [concrete]
// CHECK:STDOUT: %Generic.type.539: type = facet_type <@Generic, @Generic(%A)> [concrete]
// CHECK:STDOUT: %T.43c: %Generic.type.539 = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.50b: type = pattern_type %Generic.type.539 [concrete]
// CHECK:STDOUT: %Generic.type.478: type = facet_type <@Generic, @Generic(%A)> [concrete]
// CHECK:STDOUT: %T.c1d: %Generic.type.478 = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.708: type = pattern_type %Generic.type.478 [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
// CHECK:STDOUT: %Generic.type.73e: type = facet_type <@Generic, @Generic(%B)> [concrete]
// CHECK:STDOUT: %T.b26: %Generic.type.73e = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.635: type = pattern_type %Generic.type.73e [concrete]
// CHECK:STDOUT: %Generic.type.cb7: type = facet_type <@Generic, @Generic(%B)> [concrete]
// CHECK:STDOUT: %T.3ee: %Generic.type.cb7 = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.0c9: type = pattern_type %Generic.type.cb7 [concrete]
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
// CHECK:STDOUT: %Self.bab: %Generic.type.73e = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.b26 [symbolic]
// CHECK:STDOUT: %Self.b24: %Generic.type.cb7 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %T.binding.as_type: type = symbolic_binding_type T, 0, %T.3ee [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -439,26 +439,26 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %A.decl: type = class_decl @A [concrete = constants.%A] {} {}
// CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {}
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
// CHECK:STDOUT: %T.patt: %pattern_type.50b = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.708 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc9: type = splice_block %Generic.type [concrete = constants.%Generic.type.539] {
// CHECK:STDOUT: %.loc9: type = splice_block %Generic.type [concrete = constants.%Generic.type.478] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Generic.ref: %Generic.type.835 = name_ref Generic, file.%Generic.decl [concrete = constants.%Generic.generic]
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%A)> [concrete = constants.%Generic.type.539]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%A)> [concrete = constants.%Generic.type.478]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc9_6.2: %Generic.type.539 = symbolic_binding T, 0 [symbolic = %T.loc9_6.1 (constants.%T.43c)]
// CHECK:STDOUT: %T.loc9_6.2: %Generic.type.478 = symbolic_binding T, 0 [symbolic = %T.loc9_6.1 (constants.%T.c1d)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {
// CHECK:STDOUT: %T.patt: %pattern_type.635 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %T.patt: %pattern_type.0c9 = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %.loc10: type = splice_block %Generic.type [concrete = constants.%Generic.type.73e] {
// CHECK:STDOUT: %.loc10: type = splice_block %Generic.type [concrete = constants.%Generic.type.cb7] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Generic.ref: %Generic.type.835 = name_ref Generic, file.%Generic.decl [concrete = constants.%Generic.generic]
// CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%B)> [concrete = constants.%Generic.type.73e]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(constants.%B)> [concrete = constants.%Generic.type.cb7]
// CHECK:STDOUT: }
// CHECK:STDOUT: %T.loc10_6.2: %Generic.type.73e = symbolic_binding T, 0 [symbolic = %T.loc10_6.1 (constants.%T.b26)]
// CHECK:STDOUT: %T.loc10_6.2: %Generic.type.cb7 = symbolic_binding T, 0 [symbolic = %T.loc10_6.1 (constants.%T.3ee)]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -466,11 +466,11 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %T.loc4_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_19.1 (constants.%T.67d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%T.loc4_19.1)> [symbolic = %Generic.type (constants.%Generic.type.a3a)]
// CHECK:STDOUT: %Self.loc4_29.2: @Generic.%Generic.type (%Generic.type.a3a) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self.210)]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%T.loc4_19.1)> [symbolic = %Generic.type (constants.%Generic.type.03d)]
// CHECK:STDOUT: %Self.loc4_29.2: @Generic.%Generic.type (%Generic.type.03d) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self.15d)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc4_29.1: @Generic.%Generic.type (%Generic.type.a3a) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self.210)]
// CHECK:STDOUT: %Self.loc4_29.1: @Generic.%Generic.type (%Generic.type.03d) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self.15d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc4_29.1
@@ -496,14 +496,14 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: .Self = constants.%B
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @F(%T.loc9_6.2: %Generic.type.539) {
// CHECK:STDOUT: %T.loc9_6.1: %Generic.type.539 = symbolic_binding T, 0 [symbolic = %T.loc9_6.1 (constants.%T.43c)]
// CHECK:STDOUT: generic fn @F(%T.loc9_6.2: %Generic.type.478) {
// CHECK:STDOUT: %T.loc9_6.1: %Generic.type.478 = symbolic_binding T, 0 [symbolic = %T.loc9_6.1 (constants.%T.c1d)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn();
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @G(%T.loc10_6.2: %Generic.type.73e) {
// CHECK:STDOUT: %T.loc10_6.1: %Generic.type.73e = symbolic_binding T, 0 [symbolic = %T.loc10_6.1 (constants.%T.b26)]
// CHECK:STDOUT: generic fn @G(%T.loc10_6.2: %Generic.type.cb7) {
// CHECK:STDOUT: %T.loc10_6.1: %Generic.type.cb7 = symbolic_binding T, 0 [symbolic = %T.loc10_6.1 (constants.%T.3ee)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// 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)]
@@ -511,7 +511,7 @@ fn F(T:! Generic((), ())) {}
// 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.73e = name_ref T, %T.loc10_6.2 [symbolic = %T.loc10_6.1 (constants.%T.b26)]
// CHECK:STDOUT: %T.ref: %Generic.type.cb7 = name_ref T, %T.loc10_6.2 [symbolic = %T.loc10_6.1 (constants.%T.3ee)]
// 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: }
@@ -525,20 +525,20 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %T.loc4_19.1 => constants.%A
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @F(constants.%T.43c) {
// CHECK:STDOUT: %T.loc9_6.1 => constants.%T.43c
// CHECK:STDOUT: specific @F(constants.%T.c1d) {
// CHECK:STDOUT: %T.loc9_6.1 => constants.%T.c1d
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Generic(constants.%B) {
// CHECK:STDOUT: %T.loc4_19.1 => constants.%B
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Generic.type => constants.%Generic.type.73e
// CHECK:STDOUT: %Self.loc4_29.2 => constants.%Self.bab
// CHECK:STDOUT: %Generic.type => constants.%Generic.type.cb7
// CHECK:STDOUT: %Self.loc4_29.2 => constants.%Self.b24
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @G(constants.%T.b26) {
// CHECK:STDOUT: %T.loc10_6.1 => constants.%T.b26
// CHECK:STDOUT: specific @G(constants.%T.3ee) {
// CHECK:STDOUT: %T.loc10_6.1 => constants.%T.3ee
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_args_count_mismatch.carbon
@@ -551,8 +551,8 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %Generic.type.835: type = generic_interface_type @Generic [concrete]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %Generic.generic: %Generic.type.835 = struct_value () [concrete]
// CHECK:STDOUT: %Generic.type.a3a: type = facet_type <@Generic, @Generic(%T)> [symbolic]
// CHECK:STDOUT: %Self: %Generic.type.a3a = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Generic.type.03d: type = facet_type <@Generic, @Generic(%T)> [symbolic]
// CHECK:STDOUT: %Self: %Generic.type.03d = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
@@ -586,11 +586,11 @@ fn F(T:! Generic((), ())) {}
// CHECK:STDOUT: %T.loc3_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_19.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%T.loc3_19.1)> [symbolic = %Generic.type (constants.%Generic.type.a3a)]
// CHECK:STDOUT: %Self.loc3_29.2: @Generic.%Generic.type (%Generic.type.a3a) = symbolic_binding Self, 1 [symbolic = %Self.loc3_29.2 (constants.%Self)]
// CHECK:STDOUT: %Generic.type: type = facet_type <@Generic, @Generic(%T.loc3_19.1)> [symbolic = %Generic.type (constants.%Generic.type.03d)]
// CHECK:STDOUT: %Self.loc3_29.2: @Generic.%Generic.type (%Generic.type.03d) = symbolic_binding Self, 1 [symbolic = %Self.loc3_29.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc3_29.1: @Generic.%Generic.type (%Generic.type.a3a) = symbolic_binding Self, 1 [symbolic = %Self.loc3_29.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc3_29.1: @Generic.%Generic.type (%Generic.type.03d) = symbolic_binding Self, 1 [symbolic = %Self.loc3_29.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc3_29.1
+21 -21
View File
@@ -40,8 +40,8 @@ impl C as AddWith(C) {
// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
// CHECK:STDOUT: %AddWith.type.d53: type = generic_interface_type @AddWith [concrete]
// CHECK:STDOUT: %AddWith.generic: %AddWith.type.d53 = struct_value () [concrete]
// CHECK:STDOUT: %AddWith.type.eb8: type = facet_type <@AddWith, @AddWith(%T)> [symbolic]
// CHECK:STDOUT: %Self: %AddWith.type.eb8 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %AddWith.type.265: type = facet_type <@AddWith, @AddWith(%T)> [symbolic]
// CHECK:STDOUT: %Self: %AddWith.type.265 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %AddWith.F.type: type = fn_type @AddWith.F, @AddWith(%T) [symbolic]
// CHECK:STDOUT: %AddWith.F: %AddWith.F.type = struct_value () [symbolic]
// CHECK:STDOUT: %AddWith.assoc_type: type = assoc_entity_type @AddWith, @AddWith(%T) [symbolic]
@@ -64,15 +64,15 @@ impl C as AddWith(C) {
// CHECK:STDOUT: %T.loc4_19.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_19.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T.loc4_19.1)> [symbolic = %AddWith.type (constants.%AddWith.type.eb8)]
// CHECK:STDOUT: %Self.loc4_29.2: @AddWith.%AddWith.type (%AddWith.type.eb8) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self)]
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T.loc4_19.1)> [symbolic = %AddWith.type (constants.%AddWith.type.265)]
// CHECK:STDOUT: %Self.loc4_29.2: @AddWith.%AddWith.type (%AddWith.type.265) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self)]
// CHECK:STDOUT: %AddWith.F.type: type = fn_type @AddWith.F, @AddWith(%T.loc4_19.1) [symbolic = %AddWith.F.type (constants.%AddWith.F.type)]
// CHECK:STDOUT: %AddWith.F: @AddWith.%AddWith.F.type (%AddWith.F.type) = struct_value () [symbolic = %AddWith.F (constants.%AddWith.F)]
// CHECK:STDOUT: %AddWith.assoc_type: type = assoc_entity_type @AddWith, @AddWith(%T.loc4_19.1) [symbolic = %AddWith.assoc_type (constants.%AddWith.assoc_type)]
// CHECK:STDOUT: %assoc0.loc5_9.2: @AddWith.%AddWith.assoc_type (%AddWith.assoc_type) = assoc_entity element0, %AddWith.F.decl [symbolic = %assoc0.loc5_9.2 (constants.%assoc0)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc4_29.1: @AddWith.%AddWith.type (%AddWith.type.eb8) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc4_29.1: @AddWith.%AddWith.type (%AddWith.type.265) = symbolic_binding Self, 1 [symbolic = %Self.loc4_29.2 (constants.%Self)]
// CHECK:STDOUT: %AddWith.F.decl: @AddWith.%AddWith.F.type (%AddWith.F.type) = fn_decl @AddWith.F [symbolic = @AddWith.%AddWith.F (constants.%AddWith.F)] {} {}
// CHECK:STDOUT: %assoc0.loc5_9.1: @AddWith.%AddWith.assoc_type (%AddWith.assoc_type) = assoc_entity element0, %AddWith.F.decl [symbolic = %assoc0.loc5_9.2 (constants.%assoc0)]
// CHECK:STDOUT:
@@ -85,7 +85,7 @@ impl C as AddWith(C) {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @AddWith.F(@AddWith.%T.loc4_19.2: type, @AddWith.%Self.loc4_29.1: @AddWith.%AddWith.type (%AddWith.type.eb8)) {
// CHECK:STDOUT: generic fn @AddWith.F(@AddWith.%T.loc4_19.2: type, @AddWith.%Self.loc4_29.1: @AddWith.%AddWith.type (%AddWith.type.265)) {
// CHECK:STDOUT: fn();
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -104,33 +104,33 @@ impl C as AddWith(C) {
// CHECK:STDOUT: %AddWith.type.d53: type = generic_interface_type @AddWith [concrete]
// CHECK:STDOUT: %AddWith.generic: %AddWith.type.d53 = struct_value () [concrete]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %AddWith.type.eb8: type = facet_type <@AddWith, @AddWith(%T)> [symbolic]
// CHECK:STDOUT: %Self.690: %AddWith.type.eb8 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %AddWith.type.265: type = facet_type <@AddWith, @AddWith(%T)> [symbolic]
// CHECK:STDOUT: %Self.db2: %AddWith.type.265 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %AddWith.assoc_type.130: type = assoc_entity_type @AddWith, @AddWith(%T) [symbolic]
// CHECK:STDOUT: %assoc0.ad5: %AddWith.assoc_type.130 = assoc_entity element0, imports.%Main.import_ref.3ef [symbolic]
// CHECK:STDOUT: %AddWith.F.type.b80: type = fn_type @AddWith.F, @AddWith(%T) [symbolic]
// CHECK:STDOUT: %AddWith.F.349: %AddWith.F.type.b80 = struct_value () [symbolic]
// CHECK:STDOUT: %AddWith.type.8b5: type = facet_type <@AddWith, @AddWith(%C)> [concrete]
// CHECK:STDOUT: %AddWith.type.47a: type = facet_type <@AddWith, @AddWith(%C)> [concrete]
// CHECK:STDOUT: %AddWith.impl_witness: <witness> = impl_witness @C.as.AddWith.impl.%AddWith.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.bbf: %AddWith.type.8b5 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.58e: %AddWith.type.47a = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %AddWith.F.type.b42: type = fn_type @AddWith.F, @AddWith(%C) [concrete]
// CHECK:STDOUT: %AddWith.F.3d6: %AddWith.F.type.b42 = struct_value () [concrete]
// CHECK:STDOUT: %AddWith.assoc_type.217: type = assoc_entity_type @AddWith, @AddWith(%C) [concrete]
// CHECK:STDOUT: %assoc0.c17: %AddWith.assoc_type.217 = assoc_entity element0, imports.%Main.import_ref.3ef [concrete]
// CHECK:STDOUT: %C.as.AddWith.impl.F.type: type = fn_type @C.as.AddWith.impl.F [concrete]
// CHECK:STDOUT: %C.as.AddWith.impl.F: %C.as.AddWith.impl.F.type = struct_value () [concrete]
// CHECK:STDOUT: %AddWith.facet: %AddWith.type.8b5 = facet_value %C, (%AddWith.impl_witness) [concrete]
// CHECK:STDOUT: %AddWith.facet: %AddWith.type.47a = facet_value %C, (%AddWith.impl_witness) [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Main.AddWith: %AddWith.type.d53 = import_ref Main//a, AddWith, loaded [concrete = constants.%AddWith.generic]
// CHECK:STDOUT: %Main.import_ref.e4c = import_ref Main//a, loc4_29, unloaded
// CHECK:STDOUT: %Main.import_ref.367 = import_ref Main//a, loc4_29, unloaded
// CHECK:STDOUT: %Main.import_ref.f21 = import_ref Main//a, loc5_9, unloaded
// CHECK:STDOUT: %Main.F: @AddWith.%AddWith.F.type (%AddWith.F.type.b80) = import_ref Main//a, F, loaded [symbolic = @AddWith.%AddWith.F (constants.%AddWith.F.349)]
// CHECK:STDOUT: %Main.import_ref.b3bc94.1: type = import_ref Main//a, loc4_19, loaded [symbolic = @AddWith.%T (constants.%T)]
// CHECK:STDOUT: %Main.import_ref.3ef = import_ref Main//a, loc5_9, unloaded
// CHECK:STDOUT: %Main.import_ref.b3bc94.2: type = import_ref Main//a, loc4_19, loaded [symbolic = @AddWith.%T (constants.%T)]
// CHECK:STDOUT: %Main.import_ref.75c: @AddWith.%AddWith.type (%AddWith.type.eb8) = import_ref Main//a, loc4_29, loaded [symbolic = @AddWith.%Self (constants.%Self.690)]
// CHECK:STDOUT: %Main.import_ref.cb1: @AddWith.%AddWith.type (%AddWith.type.265) = import_ref Main//a, loc4_29, loaded [symbolic = @AddWith.%Self (constants.%Self.db2)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -144,7 +144,7 @@ impl C as AddWith(C) {
// CHECK:STDOUT: %C.ref.loc7_6: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %AddWith.ref: %AddWith.type.d53 = name_ref AddWith, imports.%Main.AddWith [concrete = constants.%AddWith.generic]
// CHECK:STDOUT: %C.ref.loc7_19: type = name_ref C, file.%C.decl [concrete = constants.%C]
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(constants.%C)> [concrete = constants.%AddWith.type.8b5]
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(constants.%C)> [concrete = constants.%AddWith.type.47a]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -152,8 +152,8 @@ impl C as AddWith(C) {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T)> [symbolic = %AddWith.type (constants.%AddWith.type.eb8)]
// CHECK:STDOUT: %Self: @AddWith.%AddWith.type (%AddWith.type.eb8) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.690)]
// CHECK:STDOUT: %AddWith.type: type = facet_type <@AddWith, @AddWith(%T)> [symbolic = %AddWith.type (constants.%AddWith.type.265)]
// CHECK:STDOUT: %Self: @AddWith.%AddWith.type (%AddWith.type.265) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.db2)]
// CHECK:STDOUT: %AddWith.F.type: type = fn_type @AddWith.F, @AddWith(%T) [symbolic = %AddWith.F.type (constants.%AddWith.F.type.b80)]
// CHECK:STDOUT: %AddWith.F: @AddWith.%AddWith.F.type (%AddWith.F.type.b80) = struct_value () [symbolic = %AddWith.F (constants.%AddWith.F.349)]
// CHECK:STDOUT: %AddWith.assoc_type: type = assoc_entity_type @AddWith, @AddWith(%T) [symbolic = %AddWith.assoc_type (constants.%AddWith.assoc_type.130)]
@@ -161,7 +161,7 @@ impl C as AddWith(C) {
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = imports.%Main.import_ref.e4c
// CHECK:STDOUT: .Self = imports.%Main.import_ref.367
// CHECK:STDOUT: .F = imports.%Main.import_ref.f21
// CHECK:STDOUT: witness = (imports.%Main.F)
// CHECK:STDOUT:
@@ -187,7 +187,7 @@ impl C as AddWith(C) {
// CHECK:STDOUT: .Self = constants.%C
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @AddWith.F(imports.%Main.import_ref.b3bc94.2: type, imports.%Main.import_ref.75c: @AddWith.%AddWith.type (%AddWith.type.eb8)) [from "a.carbon"] {
// CHECK:STDOUT: generic fn @AddWith.F(imports.%Main.import_ref.b3bc94.2: type, imports.%Main.import_ref.cb1: @AddWith.%AddWith.type (%AddWith.type.265)) [from "a.carbon"] {
// CHECK:STDOUT: fn;
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -200,14 +200,14 @@ impl C as AddWith(C) {
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @AddWith.F(constants.%T, constants.%Self.690) {}
// CHECK:STDOUT: specific @AddWith.F(constants.%T, constants.%Self.db2) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @AddWith(constants.%C) {
// CHECK:STDOUT: %T => constants.%C
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %AddWith.type => constants.%AddWith.type.8b5
// CHECK:STDOUT: %Self => constants.%Self.bbf
// CHECK:STDOUT: %AddWith.type => constants.%AddWith.type.47a
// CHECK:STDOUT: %Self => constants.%Self.58e
// CHECK:STDOUT: %AddWith.F.type => constants.%AddWith.F.type.b42
// CHECK:STDOUT: %AddWith.F => constants.%AddWith.F.3d6
// CHECK:STDOUT: %AddWith.assoc_type => constants.%AddWith.assoc_type.217
File diff suppressed because it is too large Load Diff
+64 -64
View File
@@ -76,46 +76,46 @@ interface Bar[T:! type] {}
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %NotGenericNoParams.type: type = facet_type <@NotGenericNoParams> [concrete]
// CHECK:STDOUT: %Self.aee: %NotGenericNoParams.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.9fc: %NotGenericNoParams.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %NotGenericButParams.type.647: type = generic_interface_type @NotGenericButParams [concrete]
// CHECK:STDOUT: %NotGenericButParams.generic: %NotGenericButParams.type.647 = struct_value () [concrete]
// CHECK:STDOUT: %NotGenericButParams.type.8d8: type = facet_type <@NotGenericButParams> [concrete]
// CHECK:STDOUT: %Self.441: %NotGenericButParams.type.8d8 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %NotGenericButParams.type.a08: type = facet_type <@NotGenericButParams> [concrete]
// CHECK:STDOUT: %Self.290: %NotGenericButParams.type.a08 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %type: type = facet_type <type> [concrete]
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
// CHECK:STDOUT: %GenericAndParams.type.17f: type = generic_interface_type @GenericAndParams.loc6 [concrete]
// CHECK:STDOUT: %GenericAndParams.generic.253: %GenericAndParams.type.17f = struct_value () [concrete]
// CHECK:STDOUT: %GenericAndParams.type.363: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(%T)> [symbolic]
// CHECK:STDOUT: %Self.5d9: %GenericAndParams.type.363 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %GenericAndParams.type.a01: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(%T)> [symbolic]
// CHECK:STDOUT: %Self.268: %GenericAndParams.type.a01 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete]
// CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete]
// CHECK:STDOUT: %C.5a3: type = class_type @C, @C(%T) [symbolic]
// CHECK:STDOUT: %GenericNoParams.type.515: type = facet_type <@GenericNoParams, @GenericNoParams(%T)> [symbolic]
// CHECK:STDOUT: %Self.b8d: %GenericNoParams.type.515 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %GenericNoParams.type.7cc: type = facet_type <@GenericNoParams, @GenericNoParams(%T)> [symbolic]
// CHECK:STDOUT: %Self.d3a: %GenericNoParams.type.7cc = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %U: type = symbolic_binding U, 1 [symbolic]
// CHECK:STDOUT: %GenericAndParams.type.a5d: type = generic_interface_type @GenericAndParams.loc10, @C(%T) [symbolic]
// CHECK:STDOUT: %GenericAndParams.generic.fc5: %GenericAndParams.type.a5d = struct_value () [symbolic]
// CHECK:STDOUT: %GenericAndParams.type.6e9: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(%T, %U)> [symbolic]
// CHECK:STDOUT: %Self.b03: %GenericAndParams.type.6e9 = symbolic_binding Self, 2 [symbolic]
// CHECK:STDOUT: %GenericAndParams.type.542: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(%T, %U)> [symbolic]
// CHECK:STDOUT: %Self.c75: %GenericAndParams.type.542 = symbolic_binding Self, 2 [symbolic]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
// CHECK:STDOUT: %X: type = class_type @X [concrete]
// CHECK:STDOUT: %NotGenericNoParams.impl_witness: <witness> = impl_witness @X.as.NotGenericNoParams.impl.%NotGenericNoParams.impl_witness_table [concrete]
// CHECK:STDOUT: %NotGenericButParams.impl_witness: <witness> = impl_witness @X.as.NotGenericButParams.impl.%NotGenericButParams.impl_witness_table [concrete]
// CHECK:STDOUT: %GenericAndParams.type.332: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(%X)> [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness.ba4: <witness> = impl_witness @X.as.GenericAndParams.impl.26f.%GenericAndParams.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.1ed: %GenericAndParams.type.332 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %GenericAndParams.type.2bb: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(%X)> [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness.12e: <witness> = impl_witness @X.as.GenericAndParams.impl.c55.%GenericAndParams.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.fec: %GenericAndParams.type.2bb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %C.513: type = class_type @C, @C(%X) [concrete]
// CHECK:STDOUT: %GenericNoParams.type.156: type = facet_type <@GenericNoParams, @GenericNoParams(%X)> [concrete]
// CHECK:STDOUT: %GenericNoParams.type.771: type = facet_type <@GenericNoParams, @GenericNoParams(%X)> [concrete]
// CHECK:STDOUT: %GenericAndParams.type.8ab: type = generic_interface_type @GenericAndParams.loc10, @C(%X) [concrete]
// CHECK:STDOUT: %GenericAndParams.generic.22e: %GenericAndParams.type.8ab = struct_value () [concrete]
// CHECK:STDOUT: %GenericNoParams.impl_witness: <witness> = impl_witness @X.as.GenericNoParams.impl.%GenericNoParams.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.4a5: %GenericNoParams.type.156 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %GenericAndParams.type.90e: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(%X, %X)> [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness.d80: <witness> = impl_witness @X.as.GenericAndParams.impl.b51.%GenericAndParams.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.349: %GenericAndParams.type.90e = symbolic_binding Self, 2 [symbolic]
// CHECK:STDOUT: %Self.b86: %GenericNoParams.type.771 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %GenericAndParams.type.2f8: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(%X, %X)> [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness.e7f: <witness> = impl_witness @X.as.GenericAndParams.impl.c97.%GenericAndParams.impl_witness_table [concrete]
// CHECK:STDOUT: %Self.292: %GenericAndParams.type.2f8 = symbolic_binding Self, 2 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -148,23 +148,23 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: impl_decl @X.as.NotGenericButParams.impl [concrete] {} {
// CHECK:STDOUT: %X.ref: type = name_ref X, file.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %NotGenericButParams.ref: %NotGenericButParams.type.647 = name_ref NotGenericButParams, file.%NotGenericButParams.decl [concrete = constants.%NotGenericButParams.generic]
// CHECK:STDOUT: %NotGenericButParams.type: type = facet_type <@NotGenericButParams> [concrete = constants.%NotGenericButParams.type.8d8]
// CHECK:STDOUT: %NotGenericButParams.type: type = facet_type <@NotGenericButParams> [concrete = constants.%NotGenericButParams.type.a08]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @X.as.GenericAndParams.impl.26f [concrete] {} {
// CHECK:STDOUT: impl_decl @X.as.GenericAndParams.impl.c55 [concrete] {} {
// CHECK:STDOUT: %X.ref.loc16_6: type = name_ref X, file.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %GenericAndParams.ref: %GenericAndParams.type.17f = name_ref GenericAndParams, file.%GenericAndParams.decl [concrete = constants.%GenericAndParams.generic.253]
// CHECK:STDOUT: %X.ref.loc16_28: type = name_ref X, file.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(constants.%X)> [concrete = constants.%GenericAndParams.type.332]
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(constants.%X)> [concrete = constants.%GenericAndParams.type.2bb]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @X.as.GenericNoParams.impl [concrete] {} {
// CHECK:STDOUT: %X.ref.loc17_6: type = name_ref X, file.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic]
// CHECK:STDOUT: %X.ref.loc17_13: type = name_ref X, file.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %C: type = class_type @C, @C(constants.%X) [concrete = constants.%C.513]
// CHECK:STDOUT: %.loc17: type = specific_constant @C.%GenericNoParams.decl, @C(constants.%X) [concrete = constants.%GenericNoParams.type.156]
// CHECK:STDOUT: %GenericNoParams.ref: type = name_ref GenericNoParams, %.loc17 [concrete = constants.%GenericNoParams.type.156]
// CHECK:STDOUT: %.loc17: type = specific_constant @C.%GenericNoParams.decl, @C(constants.%X) [concrete = constants.%GenericNoParams.type.771]
// CHECK:STDOUT: %GenericNoParams.ref: type = name_ref GenericNoParams, %.loc17 [concrete = constants.%GenericNoParams.type.771]
// CHECK:STDOUT: }
// CHECK:STDOUT: impl_decl @X.as.GenericAndParams.impl.b51 [concrete] {} {
// CHECK:STDOUT: impl_decl @X.as.GenericAndParams.impl.c97 [concrete] {} {
// CHECK:STDOUT: %X.ref.loc18_6: type = name_ref X, file.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic]
// CHECK:STDOUT: %X.ref.loc18_13: type = name_ref X, file.%X.decl [concrete = constants.%X]
@@ -172,12 +172,12 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: %.loc18: %GenericAndParams.type.8ab = specific_constant @C.%GenericAndParams.decl, @C(constants.%X) [concrete = constants.%GenericAndParams.generic.22e]
// CHECK:STDOUT: %GenericAndParams.ref: %GenericAndParams.type.8ab = name_ref GenericAndParams, %.loc18 [concrete = constants.%GenericAndParams.generic.22e]
// CHECK:STDOUT: %X.ref.loc18_33: type = name_ref X, file.%X.decl [concrete = constants.%X]
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(constants.%X, constants.%X)> [concrete = constants.%GenericAndParams.type.90e]
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(constants.%X, constants.%X)> [concrete = constants.%GenericAndParams.type.2f8]
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @NotGenericNoParams {
// CHECK:STDOUT: %Self: %NotGenericNoParams.type = symbolic_binding Self, 0 [symbolic = constants.%Self.aee]
// CHECK:STDOUT: %Self: %NotGenericNoParams.type = symbolic_binding Self, 0 [symbolic = constants.%Self.9fc]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -187,7 +187,7 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @NotGenericButParams {
// CHECK:STDOUT: %Self: %NotGenericButParams.type.8d8 = symbolic_binding Self, 0 [symbolic = constants.%Self.441]
// CHECK:STDOUT: %Self: %NotGenericButParams.type.a08 = symbolic_binding Self, 0 [symbolic = constants.%Self.290]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -200,11 +200,11 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: %T.loc6_28.1: type = symbolic_binding T, 0 [symbolic = %T.loc6_28.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(%T.loc6_28.1)> [symbolic = %GenericAndParams.type (constants.%GenericAndParams.type.363)]
// CHECK:STDOUT: %Self.loc6_38.2: @GenericAndParams.loc6.%GenericAndParams.type (%GenericAndParams.type.363) = symbolic_binding Self, 1 [symbolic = %Self.loc6_38.2 (constants.%Self.5d9)]
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc6, @GenericAndParams.loc6(%T.loc6_28.1)> [symbolic = %GenericAndParams.type (constants.%GenericAndParams.type.a01)]
// CHECK:STDOUT: %Self.loc6_38.2: @GenericAndParams.loc6.%GenericAndParams.type (%GenericAndParams.type.a01) = symbolic_binding Self, 1 [symbolic = %Self.loc6_38.2 (constants.%Self.268)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc6_38.1: @GenericAndParams.loc6.%GenericAndParams.type (%GenericAndParams.type.363) = symbolic_binding Self, 1 [symbolic = %Self.loc6_38.2 (constants.%Self.5d9)]
// CHECK:STDOUT: %Self.loc6_38.1: @GenericAndParams.loc6.%GenericAndParams.type (%GenericAndParams.type.a01) = symbolic_binding Self, 1 [symbolic = %Self.loc6_38.2 (constants.%Self.268)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc6_38.1
@@ -217,11 +217,11 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: generic interface @GenericNoParams(@C.%T.loc8_9.2: type) {
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %GenericNoParams.type: type = facet_type <@GenericNoParams, @GenericNoParams(%T)> [symbolic = %GenericNoParams.type (constants.%GenericNoParams.type.515)]
// CHECK:STDOUT: %Self.loc9_29.2: @GenericNoParams.%GenericNoParams.type (%GenericNoParams.type.515) = symbolic_binding Self, 1 [symbolic = %Self.loc9_29.2 (constants.%Self.b8d)]
// CHECK:STDOUT: %GenericNoParams.type: type = facet_type <@GenericNoParams, @GenericNoParams(%T)> [symbolic = %GenericNoParams.type (constants.%GenericNoParams.type.7cc)]
// CHECK:STDOUT: %Self.loc9_29.2: @GenericNoParams.%GenericNoParams.type (%GenericNoParams.type.7cc) = symbolic_binding Self, 1 [symbolic = %Self.loc9_29.2 (constants.%Self.d3a)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc9_29.1: @GenericNoParams.%GenericNoParams.type (%GenericNoParams.type.515) = symbolic_binding Self, 1 [symbolic = %Self.loc9_29.2 (constants.%Self.b8d)]
// CHECK:STDOUT: %Self.loc9_29.1: @GenericNoParams.%GenericNoParams.type (%GenericNoParams.type.7cc) = symbolic_binding Self, 1 [symbolic = %Self.loc9_29.2 (constants.%Self.d3a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc9_29.1
@@ -236,11 +236,11 @@ interface Bar[T:! type] {}
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(%T, %U.loc10_30.1)> [symbolic = %GenericAndParams.type (constants.%GenericAndParams.type.6e9)]
// CHECK:STDOUT: %Self.loc10_40.2: @GenericAndParams.loc10.%GenericAndParams.type (%GenericAndParams.type.6e9) = symbolic_binding Self, 2 [symbolic = %Self.loc10_40.2 (constants.%Self.b03)]
// CHECK:STDOUT: %GenericAndParams.type: type = facet_type <@GenericAndParams.loc10, @GenericAndParams.loc10(%T, %U.loc10_30.1)> [symbolic = %GenericAndParams.type (constants.%GenericAndParams.type.542)]
// CHECK:STDOUT: %Self.loc10_40.2: @GenericAndParams.loc10.%GenericAndParams.type (%GenericAndParams.type.542) = symbolic_binding Self, 2 [symbolic = %Self.loc10_40.2 (constants.%Self.c75)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc10_40.1: @GenericAndParams.loc10.%GenericAndParams.type (%GenericAndParams.type.6e9) = symbolic_binding Self, 2 [symbolic = %Self.loc10_40.2 (constants.%Self.b03)]
// CHECK:STDOUT: %Self.loc10_40.1: @GenericAndParams.loc10.%GenericAndParams.type (%GenericAndParams.type.542) = symbolic_binding Self, 2 [symbolic = %Self.loc10_40.2 (constants.%Self.c75)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc10_40.1
@@ -266,9 +266,9 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: witness = %NotGenericButParams.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: impl @X.as.GenericAndParams.impl.26f: %X.ref.loc16_6 as %GenericAndParams.type {
// CHECK:STDOUT: %GenericAndParams.impl_witness_table = impl_witness_table (), @X.as.GenericAndParams.impl.26f [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness: <witness> = impl_witness %GenericAndParams.impl_witness_table [concrete = constants.%GenericAndParams.impl_witness.ba4]
// CHECK:STDOUT: impl @X.as.GenericAndParams.impl.c55: %X.ref.loc16_6 as %GenericAndParams.type {
// CHECK:STDOUT: %GenericAndParams.impl_witness_table = impl_witness_table (), @X.as.GenericAndParams.impl.c55 [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness: <witness> = impl_witness %GenericAndParams.impl_witness_table [concrete = constants.%GenericAndParams.impl_witness.12e]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: witness = %GenericAndParams.impl_witness
@@ -282,9 +282,9 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: witness = %GenericNoParams.impl_witness
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: impl @X.as.GenericAndParams.impl.b51: %X.ref.loc18_6 as %GenericAndParams.type {
// CHECK:STDOUT: %GenericAndParams.impl_witness_table = impl_witness_table (), @X.as.GenericAndParams.impl.b51 [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness: <witness> = impl_witness %GenericAndParams.impl_witness_table [concrete = constants.%GenericAndParams.impl_witness.d80]
// CHECK:STDOUT: impl @X.as.GenericAndParams.impl.c97: %X.ref.loc18_6 as %GenericAndParams.type {
// CHECK:STDOUT: %GenericAndParams.impl_witness_table = impl_witness_table (), @X.as.GenericAndParams.impl.c97 [concrete]
// CHECK:STDOUT: %GenericAndParams.impl_witness: <witness> = impl_witness %GenericAndParams.impl_witness_table [concrete = constants.%GenericAndParams.impl_witness.e7f]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: witness = %GenericAndParams.impl_witness
@@ -294,12 +294,12 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: %T.loc8_9.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_9.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %GenericNoParams.type: type = facet_type <@GenericNoParams, @GenericNoParams(%T.loc8_9.1)> [symbolic = %GenericNoParams.type (constants.%GenericNoParams.type.515)]
// CHECK:STDOUT: %GenericNoParams.type: type = facet_type <@GenericNoParams, @GenericNoParams(%T.loc8_9.1)> [symbolic = %GenericNoParams.type (constants.%GenericNoParams.type.7cc)]
// CHECK:STDOUT: %GenericAndParams.type: type = generic_interface_type @GenericAndParams.loc10, @C(%T.loc8_9.1) [symbolic = %GenericAndParams.type (constants.%GenericAndParams.type.a5d)]
// CHECK:STDOUT: %GenericAndParams.generic: @C.%GenericAndParams.type (%GenericAndParams.type.a5d) = struct_value () [symbolic = %GenericAndParams.generic (constants.%GenericAndParams.generic.fc5)]
// CHECK:STDOUT:
// CHECK:STDOUT: class {
// CHECK:STDOUT: %GenericNoParams.decl: type = interface_decl @GenericNoParams [symbolic = @C.%GenericNoParams.type (constants.%GenericNoParams.type.515)] {} {}
// CHECK:STDOUT: %GenericNoParams.decl: type = interface_decl @GenericNoParams [symbolic = @C.%GenericNoParams.type (constants.%GenericNoParams.type.7cc)] {} {}
// CHECK:STDOUT: %GenericAndParams.decl: @C.%GenericAndParams.type (%GenericAndParams.type.a5d) = interface_decl @GenericAndParams.loc10 [symbolic = @C.%GenericAndParams.generic (constants.%GenericAndParams.generic.fc5)] {
// CHECK:STDOUT: %U.patt: %pattern_type = symbolic_binding_pattern U, 1 [concrete]
// CHECK:STDOUT: } {
@@ -342,15 +342,15 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: %T.loc6_28.1 => constants.%X
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %GenericAndParams.type => constants.%GenericAndParams.type.332
// CHECK:STDOUT: %Self.loc6_38.2 => constants.%Self.1ed
// CHECK:STDOUT: %GenericAndParams.type => constants.%GenericAndParams.type.2bb
// CHECK:STDOUT: %Self.loc6_38.2 => constants.%Self.fec
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @C(constants.%X) {
// CHECK:STDOUT: %T.loc8_9.1 => constants.%X
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %GenericNoParams.type => constants.%GenericNoParams.type.156
// CHECK:STDOUT: %GenericNoParams.type => constants.%GenericNoParams.type.771
// CHECK:STDOUT: %GenericAndParams.type => constants.%GenericAndParams.type.8ab
// CHECK:STDOUT: %GenericAndParams.generic => constants.%GenericAndParams.generic.22e
// CHECK:STDOUT: }
@@ -358,8 +358,8 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: specific @GenericNoParams(constants.%X) {
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T => constants.%X
// CHECK:STDOUT: %GenericNoParams.type => constants.%GenericNoParams.type.156
// CHECK:STDOUT: %Self.loc9_29.2 => constants.%Self.4a5
// CHECK:STDOUT: %GenericNoParams.type => constants.%GenericNoParams.type.771
// CHECK:STDOUT: %Self.loc9_29.2 => constants.%Self.b86
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @GenericAndParams.loc10(constants.%X, constants.%X) {
@@ -367,8 +367,8 @@ interface Bar[T:! type] {}
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %T => constants.%X
// CHECK:STDOUT: %GenericAndParams.type => constants.%GenericAndParams.type.90e
// CHECK:STDOUT: %Self.loc10_40.2 => constants.%Self.349
// CHECK:STDOUT: %GenericAndParams.type => constants.%GenericAndParams.type.2f8
// CHECK:STDOUT: %Self.loc10_40.2 => constants.%Self.292
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- fail_non_generic_implicit_params.carbon
@@ -376,8 +376,8 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %A.type.464: type = generic_interface_type @A [concrete]
// CHECK:STDOUT: %A.generic: %A.type.464 = struct_value () [concrete]
// CHECK:STDOUT: %A.type.eee: type = facet_type <@A> [concrete]
// CHECK:STDOUT: %Self: %A.type.eee = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %A.type.4c4: type = facet_type <@A> [concrete]
// CHECK:STDOUT: %Self: %A.type.4c4 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -388,7 +388,7 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @A {
// CHECK:STDOUT: %Self: %A.type.eee = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %Self: %A.type.4c4 = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -402,8 +402,8 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %A.type.464: type = generic_interface_type @A [concrete]
// CHECK:STDOUT: %A.generic: %A.type.464 = struct_value () [concrete]
// CHECK:STDOUT: %A.type.eee: type = facet_type <@A> [concrete]
// CHECK:STDOUT: %Self: %A.type.eee = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %A.type.4c4: type = facet_type <@A> [concrete]
// CHECK:STDOUT: %Self: %A.type.4c4 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -414,7 +414,7 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @A {
// CHECK:STDOUT: %Self: %A.type.eee = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %Self: %A.type.4c4 = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -428,8 +428,8 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Bar.type.d8f: type = generic_interface_type @Bar [concrete]
// CHECK:STDOUT: %Bar.generic: %Bar.type.d8f = struct_value () [concrete]
// CHECK:STDOUT: %Bar.type.0cf: type = facet_type <@Bar> [concrete]
// CHECK:STDOUT: %Self: %Bar.type.0cf = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Bar.type.c56: type = facet_type <@Bar> [concrete]
// CHECK:STDOUT: %Self: %Bar.type.c56 = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -440,7 +440,7 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Bar {
// CHECK:STDOUT: %Self: %Bar.type.0cf = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT: %Self: %Bar.type.c56 = symbolic_binding Self, 0 [symbolic = constants.%Self]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -458,8 +458,8 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
// CHECK:STDOUT: %Bar.type.d8f: type = generic_interface_type @Bar [concrete]
// CHECK:STDOUT: %Bar.generic: %Bar.type.d8f = struct_value () [concrete]
// CHECK:STDOUT: %Bar.type.4cc: type = facet_type <@Bar, @Bar(%T)> [symbolic]
// CHECK:STDOUT: %Self: %Bar.type.4cc = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Bar.type.24d: type = facet_type <@Bar, @Bar(%T)> [symbolic]
// CHECK:STDOUT: %Self: %Bar.type.24d = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -478,11 +478,11 @@ interface Bar[T:! type] {}
// CHECK:STDOUT: %T.loc8_15.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_15.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Bar.type: type = facet_type <@Bar, @Bar(%T.loc8_15.1)> [symbolic = %Bar.type (constants.%Bar.type.4cc)]
// CHECK:STDOUT: %Self.loc8_25.2: @Bar.%Bar.type (%Bar.type.4cc) = symbolic_binding Self, 1 [symbolic = %Self.loc8_25.2 (constants.%Self)]
// CHECK:STDOUT: %Bar.type: type = facet_type <@Bar, @Bar(%T.loc8_15.1)> [symbolic = %Bar.type (constants.%Bar.type.24d)]
// CHECK:STDOUT: %Self.loc8_25.2: @Bar.%Bar.type (%Bar.type.24d) = symbolic_binding Self, 1 [symbolic = %Self.loc8_25.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc8_25.1: @Bar.%Bar.type (%Bar.type.4cc) = symbolic_binding Self, 1 [symbolic = %Self.loc8_25.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc8_25.1: @Bar.%Bar.type (%Bar.type.24d) = symbolic_binding Self, 1 [symbolic = %Self.loc8_25.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc8_25.1
+53 -53
View File
@@ -56,16 +56,16 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete]
// CHECK:STDOUT: %Self.6cb: %Empty.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.61e: %Empty.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Basic.type: type = facet_type <@Basic> [concrete]
// CHECK:STDOUT: %Self.3be: %Basic.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.3e6: %Basic.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Basic.assoc_type: type = assoc_entity_type @Basic [concrete]
// CHECK:STDOUT: %assoc0.909: %Basic.assoc_type = assoc_entity element0, @Basic.%T [concrete]
// CHECK:STDOUT: %Basic.F.type: type = fn_type @Basic.F [concrete]
// CHECK:STDOUT: %Basic.F: %Basic.F.type = struct_value () [concrete]
// CHECK:STDOUT: %assoc1.a1d: %Basic.assoc_type = assoc_entity element1, @Basic.%Basic.F.decl [concrete]
// CHECK:STDOUT: %ForwardDeclared.type: type = facet_type <@ForwardDeclared> [concrete]
// CHECK:STDOUT: %Self.65a: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.8e7: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %ForwardDeclared.assoc_type: type = assoc_entity_type @ForwardDeclared [concrete]
// CHECK:STDOUT: %assoc0.06c: %ForwardDeclared.assoc_type = assoc_entity element0, @ForwardDeclared.%T [concrete]
// CHECK:STDOUT: %ForwardDeclared.F.type: type = fn_type @ForwardDeclared.F [concrete]
@@ -107,7 +107,7 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Empty {
// CHECK:STDOUT: %Self: %Empty.type = symbolic_binding Self, 0 [symbolic = constants.%Self.6cb]
// CHECK:STDOUT: %Self: %Empty.type = symbolic_binding Self, 0 [symbolic = constants.%Self.61e]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self
@@ -117,7 +117,7 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Basic {
// CHECK:STDOUT: %Self: %Basic.type = symbolic_binding Self, 0 [symbolic = constants.%Self.3be]
// CHECK:STDOUT: %Self: %Basic.type = symbolic_binding Self, 0 [symbolic = constants.%Self.3e6]
// CHECK:STDOUT: %T: type = assoc_const_decl @T.loc8 [concrete] {
// CHECK:STDOUT: %assoc0: %Basic.assoc_type = assoc_entity element0, @Basic.%T [concrete = constants.%assoc0.909]
// CHECK:STDOUT: }
@@ -134,7 +134,7 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @ForwardDeclared {
// CHECK:STDOUT: %Self: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic = constants.%Self.65a]
// CHECK:STDOUT: %Self: %ForwardDeclared.type = symbolic_binding Self, 0 [symbolic = constants.%Self.8e7]
// CHECK:STDOUT: %T: type = assoc_const_decl @T.loc16 [concrete] {
// CHECK:STDOUT: %assoc0: %ForwardDeclared.assoc_type = assoc_entity element0, @ForwardDeclared.%T [concrete = constants.%assoc0.06c]
// CHECK:STDOUT: }
@@ -166,27 +166,27 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: fn();
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T.loc8(constants.%Self.3be) {}
// CHECK:STDOUT: specific @T.loc8(constants.%Self.3e6) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Basic.F(constants.%Self.3be) {}
// CHECK:STDOUT: specific @Basic.F(constants.%Self.3e6) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T.loc16(constants.%Self.65a) {}
// CHECK:STDOUT: specific @T.loc16(constants.%Self.8e7) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @ForwardDeclared.F(constants.%Self.65a) {}
// CHECK:STDOUT: specific @ForwardDeclared.F(constants.%Self.8e7) {}
// CHECK:STDOUT:
// CHECK:STDOUT: --- b.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Empty.type: type = facet_type <@Empty> [concrete]
// CHECK:STDOUT: %pattern_type.917: type = pattern_type %Empty.type [concrete]
// CHECK:STDOUT: %pattern_type.7d1: type = pattern_type %Empty.type [concrete]
// CHECK:STDOUT: %UseEmpty.type: type = fn_type @UseEmpty [concrete]
// CHECK:STDOUT: %UseEmpty: %UseEmpty.type = struct_value () [concrete]
// CHECK:STDOUT: %Basic.type: type = facet_type <@Basic> [concrete]
// CHECK:STDOUT: %pattern_type.1ea: type = pattern_type %Basic.type [concrete]
// CHECK:STDOUT: %pattern_type.185: type = pattern_type %Basic.type [concrete]
// CHECK:STDOUT: %UseBasic.type: type = fn_type @UseBasic [concrete]
// CHECK:STDOUT: %UseBasic: %UseBasic.type = struct_value () [concrete]
// CHECK:STDOUT: %ForwardDeclared.type: type = facet_type <@ForwardDeclared> [concrete]
// CHECK:STDOUT: %pattern_type.17f: type = pattern_type %ForwardDeclared.type [concrete]
// CHECK:STDOUT: %pattern_type.0a0: type = pattern_type %ForwardDeclared.type [concrete]
// CHECK:STDOUT: %UseForwardDeclared.type: type = fn_type @UseForwardDeclared [concrete]
// CHECK:STDOUT: %UseForwardDeclared: %UseForwardDeclared.type = struct_value () [concrete]
// CHECK:STDOUT: %Basic.assoc_type: type = assoc_entity_type @Basic [concrete]
@@ -195,24 +195,24 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: %ForwardDeclared.assoc_type: type = assoc_entity_type @ForwardDeclared [concrete]
// CHECK:STDOUT: %assoc0.d49: %ForwardDeclared.assoc_type = assoc_entity element0, imports.%Main.import_ref.e0c [concrete]
// CHECK:STDOUT: %assoc1.128: %ForwardDeclared.assoc_type = assoc_entity element1, imports.%Main.import_ref.b1c [concrete]
// CHECK:STDOUT: %ptr.7bf: type = ptr_type %ForwardDeclared.type [concrete]
// CHECK:STDOUT: %pattern_type.0d9: type = pattern_type %ptr.7bf [concrete]
// CHECK:STDOUT: %ptr.c31: type = ptr_type %ForwardDeclared.type [concrete]
// CHECK:STDOUT: %pattern_type.063: type = pattern_type %ptr.c31 [concrete]
// CHECK:STDOUT: %struct_type.f: type = struct_type {.f: %ForwardDeclared.type} [concrete]
// CHECK:STDOUT: %pattern_type.522: type = pattern_type %struct_type.f [concrete]
// CHECK:STDOUT: %.e13: ref %ForwardDeclared.type = struct_access imports.%f_ref.var, element0 [concrete]
// CHECK:STDOUT: %addr: %ptr.7bf = addr_of %.e13 [concrete]
// CHECK:STDOUT: %pattern_type.afe: type = pattern_type %struct_type.f [concrete]
// CHECK:STDOUT: %.816: ref %ForwardDeclared.type = struct_access imports.%f_ref.var, element0 [concrete]
// CHECK:STDOUT: %addr: %ptr.c31 = addr_of %.816 [concrete]
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
// CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete]
// CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.b05: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.8b8: %ptr.as.Copy.impl.Op.type.b05 = struct_value () [symbolic]
// CHECK:STDOUT: %Copy.impl_witness.5c6: <witness> = impl_witness imports.%Copy.impl_witness_table.4df, @ptr.as.Copy.impl(%ForwardDeclared.type) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.34b: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%ForwardDeclared.type) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.f9f: %ptr.as.Copy.impl.Op.type.34b = struct_value () [concrete]
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.7bf, (%Copy.impl_witness.5c6) [concrete]
// CHECK:STDOUT: %.af0: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: <bound method> = bound_method %addr, %ptr.as.Copy.impl.Op.f9f [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %ptr.as.Copy.impl.Op.f9f, @ptr.as.Copy.impl.Op(%ForwardDeclared.type) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.2d4: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.74e: %ptr.as.Copy.impl.Op.type.2d4 = struct_value () [symbolic]
// CHECK:STDOUT: %Copy.impl_witness.e5d: <witness> = impl_witness imports.%Copy.impl_witness_table.c3a, @ptr.as.Copy.impl(%ForwardDeclared.type) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ba9: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%ForwardDeclared.type) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.a2e: %ptr.as.Copy.impl.Op.type.ba9 = struct_value () [concrete]
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.c31, (%Copy.impl_witness.e5d) [concrete]
// CHECK:STDOUT: %.5f3: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: <bound method> = bound_method %addr, %ptr.as.Copy.impl.Op.a2e [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %ptr.as.Copy.impl.Op.a2e, @ptr.as.Copy.impl.Op(%ForwardDeclared.type) [concrete]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %addr, %ptr.as.Copy.impl.Op.specific_fn [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -226,13 +226,13 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: import Core//prelude
// CHECK:STDOUT: import Core//prelude/...
// CHECK:STDOUT: }
// CHECK:STDOUT: %Main.import_ref.1a2 = import_ref Main//a, loc4_17, unloaded
// CHECK:STDOUT: %Main.import_ref.f86 = import_ref Main//a, loc7_17, unloaded
// CHECK:STDOUT: %Main.import_ref.69f = import_ref Main//a, loc4_17, unloaded
// CHECK:STDOUT: %Main.import_ref.1e4 = import_ref Main//a, loc7_17, unloaded
// CHECK:STDOUT: %Main.import_ref.016: %Basic.assoc_type = import_ref Main//a, loc8_8, loaded [concrete = constants.%assoc0.f14]
// CHECK:STDOUT: %Main.import_ref.f57: %Basic.assoc_type = import_ref Main//a, loc9_9, loaded [concrete = constants.%assoc1.8cf]
// CHECK:STDOUT: %Main.T.faa = import_ref Main//a, T, unloaded
// CHECK:STDOUT: %Main.F.dff = import_ref Main//a, F, unloaded
// CHECK:STDOUT: %Main.import_ref.155 = import_ref Main//a, loc15_27, unloaded
// CHECK:STDOUT: %Main.import_ref.952 = import_ref Main//a, loc15_27, unloaded
// CHECK:STDOUT: %Main.import_ref.d48: %ForwardDeclared.assoc_type = import_ref Main//a, loc16_8, loaded [concrete = constants.%assoc0.d49]
// CHECK:STDOUT: %Main.import_ref.176: %ForwardDeclared.assoc_type = import_ref Main//a, loc17_9, loaded [concrete = constants.%assoc1.128]
// CHECK:STDOUT: %Main.T.324 = import_ref Main//a, T, unloaded
@@ -241,12 +241,12 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: %Main.import_ref.e5c = import_ref Main//a, loc9_9, unloaded
// CHECK:STDOUT: %Main.import_ref.e0c = import_ref Main//a, loc16_8, unloaded
// CHECK:STDOUT: %Main.import_ref.b1c = import_ref Main//a, loc17_9, unloaded
// CHECK:STDOUT: %f_ref.patt: %pattern_type.522 = ref_binding_pattern f_ref [concrete]
// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.522 = var_pattern %f_ref.patt [concrete]
// CHECK:STDOUT: %f_ref.patt: %pattern_type.afe = ref_binding_pattern f_ref [concrete]
// CHECK:STDOUT: %f_ref.var_patt: %pattern_type.afe = var_pattern %f_ref.patt [concrete]
// CHECK:STDOUT: %f_ref.var: ref %struct_type.f = var %f_ref.var_patt [concrete]
// CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type]
// CHECK:STDOUT: %Core.import_ref.b85: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.b05) = 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.8b8)]
// CHECK:STDOUT: %Copy.impl_witness_table.4df = impl_witness_table (%Core.import_ref.b85), @ptr.as.Copy.impl [concrete]
// CHECK:STDOUT: %Core.import_ref.203: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.2d4) = 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.74e)]
// CHECK:STDOUT: %Copy.impl_witness_table.c3a = impl_witness_table (%Core.import_ref.203), @ptr.as.Copy.impl [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -268,24 +268,24 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: %Core.import = import Core
// CHECK:STDOUT: %default.import = import <none>
// CHECK:STDOUT: %UseEmpty.decl: %UseEmpty.type = fn_decl @UseEmpty [concrete = constants.%UseEmpty] {
// CHECK:STDOUT: %e.patt: %pattern_type.917 = value_binding_pattern e [concrete]
// CHECK:STDOUT: %e.param_patt: %pattern_type.917 = value_param_pattern %e.patt, call_param0 [concrete]
// CHECK:STDOUT: %e.patt: %pattern_type.7d1 = value_binding_pattern e [concrete]
// CHECK:STDOUT: %e.param_patt: %pattern_type.7d1 = value_param_pattern %e.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %e.param: %Empty.type = value_param call_param0
// CHECK:STDOUT: %Empty.ref: type = name_ref Empty, imports.%Main.Empty [concrete = constants.%Empty.type]
// CHECK:STDOUT: %e: %Empty.type = value_binding e, %e.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %UseBasic.decl: %UseBasic.type = fn_decl @UseBasic [concrete = constants.%UseBasic] {
// CHECK:STDOUT: %e.patt: %pattern_type.1ea = value_binding_pattern e [concrete]
// CHECK:STDOUT: %e.param_patt: %pattern_type.1ea = value_param_pattern %e.patt, call_param0 [concrete]
// CHECK:STDOUT: %e.patt: %pattern_type.185 = value_binding_pattern e [concrete]
// CHECK:STDOUT: %e.param_patt: %pattern_type.185 = value_param_pattern %e.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %e.param: %Basic.type = value_param call_param0
// CHECK:STDOUT: %Basic.ref: type = name_ref Basic, imports.%Main.Basic [concrete = constants.%Basic.type]
// CHECK:STDOUT: %e: %Basic.type = value_binding e, %e.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %UseForwardDeclared.decl: %UseForwardDeclared.type = fn_decl @UseForwardDeclared [concrete = constants.%UseForwardDeclared] {
// CHECK:STDOUT: %f.patt: %pattern_type.17f = value_binding_pattern f [concrete]
// CHECK:STDOUT: %f.param_patt: %pattern_type.17f = value_param_pattern %f.patt, call_param0 [concrete]
// CHECK:STDOUT: %f.patt: %pattern_type.0a0 = value_binding_pattern f [concrete]
// CHECK:STDOUT: %f.param_patt: %pattern_type.0a0 = value_param_pattern %f.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %f.param: %ForwardDeclared.type = value_param call_param0
// CHECK:STDOUT: %ForwardDeclared.ref: type = name_ref ForwardDeclared, imports.%Main.ForwardDeclared [concrete = constants.%ForwardDeclared.type]
@@ -304,20 +304,20 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: %F.ref.loc14: %ForwardDeclared.assoc_type = name_ref F, imports.%Main.import_ref.176 [concrete = constants.%assoc1.128]
// CHECK:STDOUT: %UseForwardDeclaredF: %ForwardDeclared.assoc_type = alias_binding UseForwardDeclaredF, imports.%Main.import_ref.176 [concrete = constants.%assoc1.128]
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %f.patt: %pattern_type.0d9 = ref_binding_pattern f [concrete]
// CHECK:STDOUT: %f.var_patt: %pattern_type.0d9 = var_pattern %f.patt [concrete]
// CHECK:STDOUT: %f.patt: %pattern_type.063 = ref_binding_pattern f [concrete]
// CHECK:STDOUT: %f.var_patt: %pattern_type.063 = var_pattern %f.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %f.var: ref %ptr.7bf = var %f.var_patt [concrete]
// CHECK:STDOUT: %.loc16: type = splice_block %ptr [concrete = constants.%ptr.7bf] {
// CHECK:STDOUT: %f.var: ref %ptr.c31 = var %f.var_patt [concrete]
// CHECK:STDOUT: %.loc16: type = splice_block %ptr [concrete = constants.%ptr.c31] {
// CHECK:STDOUT: %ForwardDeclared.ref.loc16: type = name_ref ForwardDeclared, imports.%Main.ForwardDeclared [concrete = constants.%ForwardDeclared.type]
// CHECK:STDOUT: %ptr: type = ptr_type %ForwardDeclared.ref.loc16 [concrete = constants.%ptr.7bf]
// CHECK:STDOUT: %ptr: type = ptr_type %ForwardDeclared.ref.loc16 [concrete = constants.%ptr.c31]
// CHECK:STDOUT: }
// CHECK:STDOUT: %f: ref %ptr.7bf = ref_binding f, %f.var [concrete = %f.var]
// CHECK:STDOUT: %f: ref %ptr.c31 = ref_binding f, %f.var [concrete = %f.var]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Empty [from "a.carbon"] {
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = imports.%Main.import_ref.1a2
// CHECK:STDOUT: .Self = imports.%Main.import_ref.69f
// CHECK:STDOUT: witness = ()
// CHECK:STDOUT:
// CHECK:STDOUT: !requires:
@@ -325,7 +325,7 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Basic [from "a.carbon"] {
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = imports.%Main.import_ref.f86
// CHECK:STDOUT: .Self = imports.%Main.import_ref.1e4
// CHECK:STDOUT: .T = imports.%Main.import_ref.016
// CHECK:STDOUT: .F = imports.%Main.import_ref.f57
// CHECK:STDOUT: witness = (imports.%Main.T.faa, imports.%Main.F.dff)
@@ -335,7 +335,7 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT:
// CHECK:STDOUT: interface @ForwardDeclared [from "a.carbon"] {
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = imports.%Main.import_ref.155
// CHECK:STDOUT: .Self = imports.%Main.import_ref.952
// CHECK:STDOUT: .T = imports.%Main.import_ref.d48
// CHECK:STDOUT: .F = imports.%Main.import_ref.176
// CHECK:STDOUT: witness = (imports.%Main.T.324, imports.%Main.F.737)
@@ -361,13 +361,13 @@ var f: ForwardDeclared* = &f_ref.f;
// CHECK:STDOUT: fn @__global_init() {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %f_ref.ref: ref %struct_type.f = name_ref f_ref, imports.%Main.f_ref [concrete = imports.%f_ref.var]
// CHECK:STDOUT: %.loc16: ref %ForwardDeclared.type = struct_access %f_ref.ref, element0 [concrete = constants.%.e13]
// CHECK:STDOUT: %addr: %ptr.7bf = addr_of %.loc16 [concrete = constants.%addr]
// CHECK:STDOUT: %impl.elem0: %.af0 = impl_witness_access constants.%Copy.impl_witness.5c6, element0 [concrete = constants.%ptr.as.Copy.impl.Op.f9f]
// CHECK:STDOUT: %.loc16: ref %ForwardDeclared.type = struct_access %f_ref.ref, element0 [concrete = constants.%.816]
// CHECK:STDOUT: %addr: %ptr.c31 = addr_of %.loc16 [concrete = constants.%addr]
// CHECK:STDOUT: %impl.elem0: %.5f3 = impl_witness_access constants.%Copy.impl_witness.e5d, element0 [concrete = constants.%ptr.as.Copy.impl.Op.a2e]
// CHECK:STDOUT: %bound_method.loc16_27.1: <bound method> = bound_method %addr, %impl.elem0 [concrete = constants.%ptr.as.Copy.impl.Op.bound]
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @ptr.as.Copy.impl.Op(constants.%ForwardDeclared.type) [concrete = constants.%ptr.as.Copy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc16_27.2: <bound method> = bound_method %addr, %specific_fn [concrete = constants.%bound_method]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.7bf = call %bound_method.loc16_27.2(%addr) [concrete = constants.%addr]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.c31 = call %bound_method.loc16_27.2(%addr) [concrete = constants.%addr]
// CHECK:STDOUT: assign file.%f.var, %ptr.as.Copy.impl.Op.call
// CHECK:STDOUT: return
// CHECK:STDOUT: }
@@ -54,7 +54,7 @@ impl library "[[@TEST_NAME]]";
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
// CHECK:STDOUT: %Main.B = import_ref Main//b, B, unloaded
// CHECK:STDOUT: %Main.import_ref.7c3 = import_ref Main//b, loc2_13, unloaded
// CHECK:STDOUT: %Main.import_ref.33f = import_ref Main//b, loc2_13, unloaded
// CHECK:STDOUT: %Main.import_ref.e5c: type = import_ref Main//b, loc7_7, loaded [concrete = constants.%empty_tuple.type]
// CHECK:STDOUT: %Main.import_ref.9f2: type = import_ref Main//b, loc7_12, loaded [concrete = constants.%B.type]
// CHECK:STDOUT: }
@@ -69,7 +69,7 @@ impl library "[[@TEST_NAME]]";
// CHECK:STDOUT:
// CHECK:STDOUT: interface @B [from "fail_b.carbon"] {
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = imports.%Main.import_ref.7c3
// CHECK:STDOUT: .Self = imports.%Main.import_ref.33f
// CHECK:STDOUT: witness = ()
// CHECK:STDOUT:
// CHECK:STDOUT: !requires:
+11 -11
View File
@@ -196,12 +196,12 @@ interface A(T:! type) {
// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
// CHECK:STDOUT: %A.type.464: type = generic_interface_type @A [concrete]
// CHECK:STDOUT: %A.generic: %A.type.464 = struct_value () [concrete]
// CHECK:STDOUT: %A.type.314: type = facet_type <@A, @A(%T)> [symbolic]
// CHECK:STDOUT: %Self: %A.type.314 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %A.type.ade: type = facet_type <@A, @A(%T)> [symbolic]
// CHECK:STDOUT: %Self: %A.type.ade = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic]
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
// CHECK:STDOUT: %A.type.b6c: type = facet_type <@A, @A(%empty_struct_type)> [concrete]
// CHECK:STDOUT: %A.type.69e: type = facet_type <@A, @A(%empty_struct_type)> [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -220,11 +220,11 @@ interface A(T:! type) {
// CHECK:STDOUT: %T.loc3_13.1: type = symbolic_binding T, 0 [symbolic = %T.loc3_13.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T.loc3_13.1)> [symbolic = %A.type (constants.%A.type.314)]
// CHECK:STDOUT: %Self.loc3_23.2: @A.%A.type (%A.type.314) = symbolic_binding Self, 1 [symbolic = %Self.loc3_23.2 (constants.%Self)]
// CHECK:STDOUT: %A.type: type = facet_type <@A, @A(%T.loc3_13.1)> [symbolic = %A.type (constants.%A.type.ade)]
// CHECK:STDOUT: %Self.loc3_23.2: @A.%A.type (%A.type.ade) = symbolic_binding Self, 1 [symbolic = %Self.loc3_23.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc3_23.1: @A.%A.type (%A.type.314) = symbolic_binding Self, 1 [symbolic = %Self.loc3_23.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc3_23.1: @A.%A.type (%A.type.ade) = symbolic_binding Self, 1 [symbolic = %Self.loc3_23.2 (constants.%Self)]
// CHECK:STDOUT: %A.require0.decl = require_decl @A.require0 [concrete] {
// CHECK:STDOUT: require %Self.as_type impls %A.type.loc11_28
// CHECK:STDOUT: } {
@@ -232,7 +232,7 @@ interface A(T:! type) {
// CHECK:STDOUT: %A.ref: %A.type.464 = name_ref A, file.%A.decl [concrete = constants.%A.generic]
// CHECK:STDOUT: %.loc11_27: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
// CHECK:STDOUT: %.loc11_28: type = converted %.loc11_27, constants.%empty_struct_type [concrete = constants.%empty_struct_type]
// CHECK:STDOUT: %A.type.loc11_28: type = facet_type <@A, @A(constants.%empty_struct_type)> [concrete = constants.%A.type.b6c]
// CHECK:STDOUT: %A.type.loc11_28: type = facet_type <@A, @A(constants.%empty_struct_type)> [concrete = constants.%A.type.69e]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
@@ -244,10 +244,10 @@ interface A(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @A.require0(@A.%T.loc3_13.2: type, @A.%Self.loc3_23.1: @A.%A.type (%A.type.314)) {
// CHECK:STDOUT: generic require @A.require0(@A.%T.loc3_13.2: type, @A.%Self.loc3_23.1: @A.%A.type (%A.type.ade)) {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %A.type.loc11_18: type = facet_type <@A, @A(%T)> [symbolic = %A.type.loc11_18 (constants.%A.type.314)]
// CHECK:STDOUT: %Self: @A.require0.%A.type.loc11_18 (%A.type.314) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %A.type.loc11_18: type = facet_type <@A, @A(%T)> [symbolic = %A.type.loc11_18 (constants.%A.type.ade)]
// CHECK:STDOUT: %Self: @A.require0.%A.type.loc11_18 (%A.type.ade) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)]
// 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: }
// CHECK:STDOUT:
@@ -261,7 +261,7 @@ interface A(T:! type) {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @A.require0(constants.%T, constants.%Self) {
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %A.type.loc11_18 => constants.%A.type.314
// CHECK:STDOUT: %A.type.loc11_18 => constants.%A.type.ade
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: }
+7 -7
View File
@@ -31,7 +31,7 @@ fn F() {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self [symbolic]
// CHECK:STDOUT: %pattern_type.49e: type = pattern_type %Self.binding.as_type [symbolic]
// CHECK:STDOUT: %pattern_type.2ec: 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]
@@ -42,7 +42,7 @@ fn F() {
// CHECK:STDOUT: %empty_tuple.type.as.I.impl.G.type: type = fn_type @empty_tuple.type.as.I.impl.G [concrete]
// CHECK:STDOUT: %empty_tuple.type.as.I.impl.G: %empty_tuple.type.as.I.impl.G.type = struct_value () [concrete]
// CHECK:STDOUT: %I.facet: %I.type = facet_value %empty_tuple.type, (%I.impl_witness) [concrete]
// CHECK:STDOUT: %.3db: type = fn_type_with_self_type %I.G.type, %I.facet [concrete]
// CHECK:STDOUT: %.929: type = fn_type_with_self_type %I.G.type, %I.facet [concrete]
// CHECK:STDOUT: %empty_tuple.type.as.I.impl.G.bound: <bound method> = bound_method %empty_tuple, %empty_tuple.type.as.I.impl.G [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -56,8 +56,8 @@ fn F() {
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding 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.49e) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.G.%pattern_type (%pattern_type.49e) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: %self.patt: @I.G.%pattern_type (%pattern_type.2ec) = value_binding_pattern self [concrete]
// CHECK:STDOUT: %self.param_patt: @I.G.%pattern_type (%pattern_type.2ec) = value_param_pattern %self.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// 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)] {
@@ -105,7 +105,7 @@ fn F() {
// CHECK:STDOUT: %.loc22_4.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %I.ref: type = name_ref I, %I.decl [concrete = constants.%I.type]
// CHECK:STDOUT: %G.ref: %I.assoc_type = name_ref G, @I.%assoc0 [concrete = constants.%assoc0]
// CHECK:STDOUT: %impl.elem0: %.3db = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%empty_tuple.type.as.I.impl.G]
// CHECK:STDOUT: %impl.elem0: %.929 = impl_witness_access constants.%I.impl_witness, element0 [concrete = constants.%empty_tuple.type.as.I.impl.G]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.loc22_4.1, %impl.elem0 [concrete = constants.%empty_tuple.type.as.I.impl.G.bound]
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete = constants.%empty_tuple]
// CHECK:STDOUT: %.loc22_4.2: %empty_tuple.type = converted %.loc22_4.1, %empty_tuple [concrete = constants.%empty_tuple]
@@ -116,7 +116,7 @@ fn F() {
// CHECK:STDOUT: generic fn @I.G(@I.%Self: %I.type) {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self)]
// 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.49e)]
// CHECK:STDOUT: %pattern_type: type = pattern_type %Self.binding.as_type [symbolic = %pattern_type (constants.%pattern_type.2ec)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn(%self.param: @I.G.%Self.binding.as_type (%Self.binding.as_type));
// CHECK:STDOUT: }
@@ -129,7 +129,7 @@ fn F() {
// CHECK:STDOUT: specific @I.G(constants.%Self) {
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.49e
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2ec
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.G(constants.%I.facet) {
+137 -137
View File
@@ -61,59 +61,59 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %Interface.type.815: type = generic_interface_type @Interface [concrete]
// CHECK:STDOUT: %Interface.generic: %Interface.type.815 = struct_value () [concrete]
// CHECK:STDOUT: %Interface.type.048: type = facet_type <@Interface, @Interface(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.6da: %Interface.type.048 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Interface.type.442: type = facet_type <@Interface, @Interface(%T.67d)> [symbolic]
// CHECK:STDOUT: %Self.ade: %Interface.type.442 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic]
// CHECK:STDOUT: %require_complete.ef1: <witness> = require_complete_type %ptr.e8f [symbolic]
// CHECK:STDOUT: %Interface.assoc_type.5a2: type = assoc_entity_type @Interface, @Interface(%T.67d) [symbolic]
// CHECK:STDOUT: %assoc0.624: %Interface.assoc_type.5a2 = assoc_entity element0, @Interface.%X [symbolic]
// CHECK:STDOUT: %I.f38: %Interface.type.048 = symbolic_binding I, 1 [symbolic]
// CHECK:STDOUT: %pattern_type.3b5: type = pattern_type %Interface.type.048 [symbolic]
// CHECK:STDOUT: %I.682: %Interface.type.442 = symbolic_binding I, 1 [symbolic]
// CHECK:STDOUT: %pattern_type.cbe: type = pattern_type %Interface.type.442 [symbolic]
// CHECK:STDOUT: %pattern_type.4f4: type = pattern_type %ptr.e8f [symbolic]
// CHECK:STDOUT: %AccessGeneric.type: type = fn_type @AccessGeneric [concrete]
// CHECK:STDOUT: %AccessGeneric: %AccessGeneric.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.428: <witness> = require_complete_type %Interface.type.048 [symbolic]
// CHECK:STDOUT: %I.binding.as_type.dad: type = symbolic_binding_type I, 1, %I.f38 [symbolic]
// CHECK:STDOUT: %Interface.lookup_impl_witness.269: <witness> = lookup_impl_witness %I.f38, @Interface, @Interface(%T.67d) [symbolic]
// CHECK:STDOUT: %impl.elem0.1e6: %ptr.e8f = impl_witness_access %Interface.lookup_impl_witness.269, element0 [symbolic]
// CHECK:STDOUT: %require_complete.46e: <witness> = require_complete_type %Interface.type.442 [symbolic]
// CHECK:STDOUT: %I.binding.as_type.24f: type = symbolic_binding_type I, 1, %I.682 [symbolic]
// CHECK:STDOUT: %Interface.lookup_impl_witness.9f1: <witness> = lookup_impl_witness %I.682, @Interface, @Interface(%T.67d) [symbolic]
// CHECK:STDOUT: %impl.elem0.117: %ptr.e8f = impl_witness_access %Interface.lookup_impl_witness.9f1, element0 [symbolic]
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
// CHECK:STDOUT: %Copy.Op.type: type = fn_type @Copy.Op [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.b05: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.8b8: %ptr.as.Copy.impl.Op.type.b05 = struct_value () [symbolic]
// CHECK:STDOUT: %.841: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.2d4: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.74e: %ptr.as.Copy.impl.Op.type.2d4 = struct_value () [symbolic]
// CHECK:STDOUT: %.2f2: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.67d) [symbolic]
// CHECK:STDOUT: %Copy.lookup_impl_witness.2e6: <witness> = lookup_impl_witness %ptr.e8f, @Copy [symbolic]
// CHECK:STDOUT: %Copy.facet.29b: %Copy.type = facet_value %ptr.e8f, (%Copy.lookup_impl_witness.2e6) [symbolic]
// CHECK:STDOUT: %.cb5: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.29b [symbolic]
// CHECK:STDOUT: %impl.elem0.771: %.cb5 = impl_witness_access %Copy.lookup_impl_witness.2e6, element0 [symbolic]
// CHECK:STDOUT: %bound_method.b85: <bound method> = bound_method %impl.elem0.1e6, %impl.elem0.771 [symbolic]
// CHECK:STDOUT: %specific_impl_fn.b85: <specific function> = specific_impl_function %impl.elem0.771, @Copy.Op(%Copy.facet.29b) [symbolic]
// CHECK:STDOUT: %bound_method.2be: <bound method> = bound_method %impl.elem0.1e6, %specific_impl_fn.b85 [symbolic]
// CHECK:STDOUT: %Copy.facet.c25: %Copy.type = facet_value %ptr.e8f, (%Copy.lookup_impl_witness.2e6) [symbolic]
// CHECK:STDOUT: %.b46: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.c25 [symbolic]
// CHECK:STDOUT: %impl.elem0.201: %.b46 = impl_witness_access %Copy.lookup_impl_witness.2e6, element0 [symbolic]
// CHECK:STDOUT: %bound_method.54b: <bound method> = bound_method %impl.elem0.117, %impl.elem0.201 [symbolic]
// CHECK:STDOUT: %specific_impl_fn.b84: <specific function> = specific_impl_function %impl.elem0.201, @Copy.Op(%Copy.facet.c25) [symbolic]
// CHECK:STDOUT: %bound_method.a76: <bound method> = bound_method %impl.elem0.117, %specific_impl_fn.b84 [symbolic]
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %Interface.type.935: type = facet_type <@Interface, @Interface(%i32)> [concrete]
// CHECK:STDOUT: %I.78e: %Interface.type.935 = symbolic_binding I, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.772: type = pattern_type %Interface.type.935 [concrete]
// CHECK:STDOUT: %Interface.type.389: type = facet_type <@Interface, @Interface(%i32)> [concrete]
// CHECK:STDOUT: %I.50d: %Interface.type.389 = symbolic_binding I, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.e2d: type = pattern_type %Interface.type.389 [concrete]
// CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete]
// CHECK:STDOUT: %pattern_type.fe8: type = pattern_type %ptr.235 [concrete]
// CHECK:STDOUT: %AccessConcrete.type: type = fn_type @AccessConcrete [concrete]
// CHECK:STDOUT: %AccessConcrete: %AccessConcrete.type = struct_value () [concrete]
// CHECK:STDOUT: %Self.0b5: %Interface.type.935 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.b54: %Interface.type.389 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Interface.assoc_type.77f: type = assoc_entity_type @Interface, @Interface(%i32) [concrete]
// CHECK:STDOUT: %assoc0.2ec: %Interface.assoc_type.77f = assoc_entity element0, @Interface.%X [concrete]
// CHECK:STDOUT: %I.binding.as_type.02a: type = symbolic_binding_type I, 0, %I.78e [symbolic]
// CHECK:STDOUT: %Interface.lookup_impl_witness.56a: <witness> = lookup_impl_witness %I.78e, @Interface, @Interface(%i32) [symbolic]
// CHECK:STDOUT: %I.binding.as_type.78a: type = symbolic_binding_type I, 0, %I.50d [symbolic]
// CHECK:STDOUT: %Interface.lookup_impl_witness.4be: <witness> = lookup_impl_witness %I.50d, @Interface, @Interface(%i32) [symbolic]
// CHECK:STDOUT: %complete_type.3d0: <witness> = complete_type_witness %ptr.235 [concrete]
// CHECK:STDOUT: %impl.elem0.a50: %ptr.235 = impl_witness_access %Interface.lookup_impl_witness.56a, element0 [symbolic]
// CHECK:STDOUT: %Copy.impl_witness.9c7: <witness> = impl_witness imports.%Copy.impl_witness_table.4df, @ptr.as.Copy.impl(%i32) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.082: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%i32) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.624: %ptr.as.Copy.impl.Op.type.082 = struct_value () [concrete]
// CHECK:STDOUT: %Copy.facet.fff: %Copy.type = facet_value %ptr.235, (%Copy.impl_witness.9c7) [concrete]
// CHECK:STDOUT: %.fef: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.fff [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: <bound method> = bound_method %impl.elem0.a50, %ptr.as.Copy.impl.Op.624 [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %ptr.as.Copy.impl.Op.624, @ptr.as.Copy.impl.Op(%i32) [concrete]
// CHECK:STDOUT: %bound_method.289: <bound method> = bound_method %impl.elem0.a50, %ptr.as.Copy.impl.Op.specific_fn [symbolic]
// CHECK:STDOUT: %impl.elem0.322: %ptr.235 = impl_witness_access %Interface.lookup_impl_witness.4be, element0 [symbolic]
// CHECK:STDOUT: %Copy.impl_witness.843: <witness> = impl_witness imports.%Copy.impl_witness_table.c3a, @ptr.as.Copy.impl(%i32) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.c3c: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%i32) [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.011: %ptr.as.Copy.impl.Op.type.c3c = struct_value () [concrete]
// CHECK:STDOUT: %Copy.facet.a7b: %Copy.type = facet_value %ptr.235, (%Copy.impl_witness.843) [concrete]
// CHECK:STDOUT: %.e6f: type = fn_type_with_self_type %Copy.Op.type, %Copy.facet.a7b [concrete]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: <bound method> = bound_method %impl.elem0.322, %ptr.as.Copy.impl.Op.011 [symbolic]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %ptr.as.Copy.impl.Op.011, @ptr.as.Copy.impl.Op(%i32) [concrete]
// CHECK:STDOUT: %bound_method.06d: <bound method> = bound_method %impl.elem0.322, %ptr.as.Copy.impl.Op.specific_fn [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -124,8 +124,8 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: import Core//prelude/...
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.Copy: type = import_ref Core//prelude/parts/copy, Copy, loaded [concrete = constants.%Copy.type]
// CHECK:STDOUT: %Core.import_ref.b85: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.b05) = 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.8b8)]
// CHECK:STDOUT: %Copy.impl_witness_table.4df = impl_witness_table (%Core.import_ref.b85), @ptr.as.Copy.impl [concrete]
// CHECK:STDOUT: %Core.import_ref.203: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.2d4) = 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.74e)]
// CHECK:STDOUT: %Copy.impl_witness_table.c3a = impl_witness_table (%Core.import_ref.203), @ptr.as.Copy.impl [concrete]
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -145,7 +145,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT: %AccessGeneric.decl: %AccessGeneric.type = fn_decl @AccessGeneric [concrete = constants.%AccessGeneric] {
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %I.patt: @AccessGeneric.%pattern_type.loc8_28 (%pattern_type.3b5) = symbolic_binding_pattern I, 1 [concrete]
// CHECK:STDOUT: %I.patt: @AccessGeneric.%pattern_type.loc8_28 (%pattern_type.cbe) = symbolic_binding_pattern I, 1 [concrete]
// CHECK:STDOUT: %return.patt: @AccessGeneric.%pattern_type.loc8_46 (%pattern_type.4f4) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @AccessGeneric.%pattern_type.loc8_46 (%pattern_type.4f4) = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
@@ -153,32 +153,32 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %ptr.loc8_50.2: type = ptr_type %T.ref.loc8_49 [symbolic = %ptr.loc8_50.1 (constants.%ptr.e8f)]
// CHECK:STDOUT: %.Self.1: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %T.loc8_18.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_18.1 (constants.%T.67d)]
// CHECK:STDOUT: %.loc8: type = splice_block %Interface.type.loc8_43.2 [symbolic = %Interface.type.loc8_43.1 (constants.%Interface.type.048)] {
// CHECK:STDOUT: %.loc8: type = splice_block %Interface.type.loc8_43.2 [symbolic = %Interface.type.loc8_43.1 (constants.%Interface.type.442)] {
// CHECK:STDOUT: %.Self.2: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Interface.ref: %Interface.type.815 = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.generic]
// CHECK:STDOUT: %T.ref.loc8_42: type = name_ref T, %T.loc8_18.2 [symbolic = %T.loc8_18.1 (constants.%T.67d)]
// CHECK:STDOUT: %Interface.type.loc8_43.2: type = facet_type <@Interface, @Interface(constants.%T.67d)> [symbolic = %Interface.type.loc8_43.1 (constants.%Interface.type.048)]
// CHECK:STDOUT: %Interface.type.loc8_43.2: type = facet_type <@Interface, @Interface(constants.%T.67d)> [symbolic = %Interface.type.loc8_43.1 (constants.%Interface.type.442)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %I.loc8_28.2: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.048) = symbolic_binding I, 1 [symbolic = %I.loc8_28.1 (constants.%I.f38)]
// CHECK:STDOUT: %I.loc8_28.2: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.442) = symbolic_binding I, 1 [symbolic = %I.loc8_28.1 (constants.%I.682)]
// CHECK:STDOUT: %return.param: ref @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = out_param call_param0
// CHECK:STDOUT: %return: ref @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %AccessConcrete.decl: %AccessConcrete.type = fn_decl @AccessConcrete [concrete = constants.%AccessConcrete] {
// CHECK:STDOUT: %I.patt: %pattern_type.772 = symbolic_binding_pattern I, 0 [concrete]
// CHECK:STDOUT: %I.patt: %pattern_type.e2d = symbolic_binding_pattern I, 0 [concrete]
// CHECK:STDOUT: %return.patt: %pattern_type.fe8 = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.fe8 = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %int_32.loc12_42: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc12_42: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
// CHECK:STDOUT: %ptr: type = ptr_type %i32.loc12_42 [concrete = constants.%ptr.235]
// CHECK:STDOUT: %.loc12: type = splice_block %Interface.type [concrete = constants.%Interface.type.935] {
// CHECK:STDOUT: %.loc12: type = splice_block %Interface.type [concrete = constants.%Interface.type.389] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Interface.ref: %Interface.type.815 = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.generic]
// CHECK:STDOUT: %int_32.loc12_33: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc12_33: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(constants.%i32)> [concrete = constants.%Interface.type.935]
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(constants.%i32)> [concrete = constants.%Interface.type.389]
// CHECK:STDOUT: }
// CHECK:STDOUT: %I.loc12_19.2: %Interface.type.935 = symbolic_binding I, 0 [symbolic = %I.loc12_19.1 (constants.%I.78e)]
// CHECK:STDOUT: %I.loc12_19.2: %Interface.type.389 = symbolic_binding I, 0 [symbolic = %I.loc12_19.1 (constants.%I.50d)]
// CHECK:STDOUT: %return.param: ref %ptr.235 = out_param call_param0
// CHECK:STDOUT: %return: ref %ptr.235 = return_slot %return.param
// CHECK:STDOUT: }
@@ -188,13 +188,13 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %T.loc4_21.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_21.1 (constants.%T.67d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(%T.loc4_21.1)> [symbolic = %Interface.type (constants.%Interface.type.048)]
// CHECK:STDOUT: %Self.loc4_31.2: @Interface.%Interface.type (%Interface.type.048) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.6da)]
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(%T.loc4_21.1)> [symbolic = %Interface.type (constants.%Interface.type.442)]
// CHECK:STDOUT: %Self.loc4_31.2: @Interface.%Interface.type (%Interface.type.442) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.ade)]
// CHECK:STDOUT: %Interface.assoc_type: type = assoc_entity_type @Interface, @Interface(%T.loc4_21.1) [symbolic = %Interface.assoc_type (constants.%Interface.assoc_type.5a2)]
// CHECK:STDOUT: %assoc0: @Interface.%Interface.assoc_type (%Interface.assoc_type.5a2) = assoc_entity element0, %X [symbolic = %assoc0 (constants.%assoc0.624)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.048) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.6da)]
// CHECK:STDOUT: %Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.442) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.ade)]
// CHECK:STDOUT: %X: @X.%ptr (%ptr.e8f) = assoc_const_decl @X [concrete] {
// CHECK:STDOUT: %assoc0: @Interface.%Interface.assoc_type (%Interface.assoc_type.5a2) = assoc_entity element0, @Interface.%X [symbolic = @Interface.%assoc0 (constants.%assoc0.624)]
// CHECK:STDOUT: }
@@ -209,7 +209,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic assoc_const @X(@Interface.%T.loc4_21.2: type, @Interface.%Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.048)) {
// CHECK:STDOUT: generic assoc_const @X(@Interface.%T.loc4_21.2: type, @Interface.%Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.442)) {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T.67d)]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic = %ptr (constants.%ptr.e8f)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr [symbolic = %require_complete (constants.%require_complete.ef1)]
@@ -217,71 +217,71 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: assoc_const X:! @X.%ptr (%ptr.e8f);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @AccessGeneric(%T.loc8_18.2: type, %I.loc8_28.2: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.048)) {
// CHECK:STDOUT: generic fn @AccessGeneric(%T.loc8_18.2: type, %I.loc8_28.2: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.442)) {
// CHECK:STDOUT: %T.loc8_18.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_18.1 (constants.%T.67d)]
// CHECK:STDOUT: %Interface.type.loc8_43.1: type = facet_type <@Interface, @Interface(%T.loc8_18.1)> [symbolic = %Interface.type.loc8_43.1 (constants.%Interface.type.048)]
// CHECK:STDOUT: %I.loc8_28.1: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.048) = symbolic_binding I, 1 [symbolic = %I.loc8_28.1 (constants.%I.f38)]
// CHECK:STDOUT: %pattern_type.loc8_28: type = pattern_type %Interface.type.loc8_43.1 [symbolic = %pattern_type.loc8_28 (constants.%pattern_type.3b5)]
// CHECK:STDOUT: %Interface.type.loc8_43.1: type = facet_type <@Interface, @Interface(%T.loc8_18.1)> [symbolic = %Interface.type.loc8_43.1 (constants.%Interface.type.442)]
// CHECK:STDOUT: %I.loc8_28.1: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.442) = symbolic_binding I, 1 [symbolic = %I.loc8_28.1 (constants.%I.682)]
// CHECK:STDOUT: %pattern_type.loc8_28: type = pattern_type %Interface.type.loc8_43.1 [symbolic = %pattern_type.loc8_28 (constants.%pattern_type.cbe)]
// CHECK:STDOUT: %ptr.loc8_50.1: type = ptr_type %T.loc8_18.1 [symbolic = %ptr.loc8_50.1 (constants.%ptr.e8f)]
// CHECK:STDOUT: %pattern_type.loc8_46: type = pattern_type %ptr.loc8_50.1 [symbolic = %pattern_type.loc8_46 (constants.%pattern_type.4f4)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete.loc9_10: <witness> = require_complete_type %Interface.type.loc8_43.1 [symbolic = %require_complete.loc9_10 (constants.%require_complete.428)]
// CHECK:STDOUT: %require_complete.loc9_10: <witness> = require_complete_type %Interface.type.loc8_43.1 [symbolic = %require_complete.loc9_10 (constants.%require_complete.46e)]
// CHECK:STDOUT: %Interface.assoc_type: type = assoc_entity_type @Interface, @Interface(%T.loc8_18.1) [symbolic = %Interface.assoc_type (constants.%Interface.assoc_type.5a2)]
// CHECK:STDOUT: %assoc0: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.5a2) = assoc_entity element0, @Interface.%X [symbolic = %assoc0 (constants.%assoc0.624)]
// 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.dad)]
// 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.269)]
// CHECK:STDOUT: %impl.elem0.loc9_11.3: @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = impl_witness_access %Interface.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_11.3 (constants.%impl.elem0.1e6)]
// 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.24f)]
// 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.9f1)]
// CHECK:STDOUT: %impl.elem0.loc9_11.3: @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = impl_witness_access %Interface.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_11.3 (constants.%impl.elem0.117)]
// CHECK:STDOUT: %require_complete.loc9_13: <witness> = require_complete_type %ptr.loc8_50.1 [symbolic = %require_complete.loc9_13 (constants.%require_complete.ef1)]
// CHECK:STDOUT: %.loc9_11.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc8_18.1) [symbolic = %.loc9_11.3 (constants.%.841)]
// CHECK:STDOUT: %.loc9_11.3: require_specific_def_type = require_specific_def @ptr.as.Copy.impl(%T.loc8_18.1) [symbolic = %.loc9_11.3 (constants.%.2f2)]
// CHECK:STDOUT: %Copy.lookup_impl_witness: <witness> = lookup_impl_witness %ptr.loc8_50.1, @Copy [symbolic = %Copy.lookup_impl_witness (constants.%Copy.lookup_impl_witness.2e6)]
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.loc8_50.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet (constants.%Copy.facet.29b)]
// CHECK:STDOUT: %.loc9_11.4: type = fn_type_with_self_type constants.%Copy.Op.type, %Copy.facet [symbolic = %.loc9_11.4 (constants.%.cb5)]
// CHECK:STDOUT: %impl.elem0.loc9_11.4: @AccessGeneric.%.loc9_11.4 (%.cb5) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.771)]
// CHECK:STDOUT: %bound_method.loc9_11.3: <bound method> = bound_method %impl.elem0.loc9_11.3, %impl.elem0.loc9_11.4 [symbolic = %bound_method.loc9_11.3 (constants.%bound_method.b85)]
// CHECK:STDOUT: %specific_impl_fn.loc9_11.2: <specific function> = specific_impl_function %impl.elem0.loc9_11.4, @Copy.Op(%Copy.facet) [symbolic = %specific_impl_fn.loc9_11.2 (constants.%specific_impl_fn.b85)]
// CHECK:STDOUT: %bound_method.loc9_11.4: <bound method> = bound_method %impl.elem0.loc9_11.3, %specific_impl_fn.loc9_11.2 [symbolic = %bound_method.loc9_11.4 (constants.%bound_method.2be)]
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.loc8_50.1, (%Copy.lookup_impl_witness) [symbolic = %Copy.facet (constants.%Copy.facet.c25)]
// CHECK:STDOUT: %.loc9_11.4: type = fn_type_with_self_type constants.%Copy.Op.type, %Copy.facet [symbolic = %.loc9_11.4 (constants.%.b46)]
// CHECK:STDOUT: %impl.elem0.loc9_11.4: @AccessGeneric.%.loc9_11.4 (%.b46) = impl_witness_access %Copy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.201)]
// CHECK:STDOUT: %bound_method.loc9_11.3: <bound method> = bound_method %impl.elem0.loc9_11.3, %impl.elem0.loc9_11.4 [symbolic = %bound_method.loc9_11.3 (constants.%bound_method.54b)]
// CHECK:STDOUT: %specific_impl_fn.loc9_11.2: <specific function> = specific_impl_function %impl.elem0.loc9_11.4, @Copy.Op(%Copy.facet) [symbolic = %specific_impl_fn.loc9_11.2 (constants.%specific_impl_fn.b84)]
// CHECK:STDOUT: %bound_method.loc9_11.4: <bound method> = bound_method %impl.elem0.loc9_11.3, %specific_impl_fn.loc9_11.2 [symbolic = %bound_method.loc9_11.4 (constants.%bound_method.a76)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %I.ref: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.048) = name_ref I, %I.loc8_28.2 [symbolic = %I.loc8_28.1 (constants.%I.f38)]
// CHECK:STDOUT: %I.ref: @AccessGeneric.%Interface.type.loc8_43.1 (%Interface.type.442) = name_ref I, %I.loc8_28.2 [symbolic = %I.loc8_28.1 (constants.%I.682)]
// CHECK:STDOUT: %.loc9_11.1: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.5a2) = specific_constant @X.%assoc0, @Interface(constants.%T.67d) [symbolic = %assoc0 (constants.%assoc0.624)]
// CHECK:STDOUT: %X.ref: @AccessGeneric.%Interface.assoc_type (%Interface.assoc_type.5a2) = name_ref X, %.loc9_11.1 [symbolic = %assoc0 (constants.%assoc0.624)]
// CHECK:STDOUT: %I.as_type: type = facet_access_type %I.ref [symbolic = %I.binding.as_type (constants.%I.binding.as_type.dad)]
// CHECK:STDOUT: %.loc9_11.2: type = converted %I.ref, %I.as_type [symbolic = %I.binding.as_type (constants.%I.binding.as_type.dad)]
// CHECK:STDOUT: %impl.elem0.loc9_11.1: @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = impl_witness_access constants.%Interface.lookup_impl_witness.269, element0 [symbolic = %impl.elem0.loc9_11.3 (constants.%impl.elem0.1e6)]
// CHECK:STDOUT: %impl.elem0.loc9_11.2: @AccessGeneric.%.loc9_11.4 (%.cb5) = impl_witness_access constants.%Copy.lookup_impl_witness.2e6, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.771)]
// 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.b85)]
// CHECK:STDOUT: %specific_impl_fn.loc9_11.1: <specific function> = specific_impl_function %impl.elem0.loc9_11.2, @Copy.Op(constants.%Copy.facet.29b) [symbolic = %specific_impl_fn.loc9_11.2 (constants.%specific_impl_fn.b85)]
// CHECK:STDOUT: %bound_method.loc9_11.2: <bound method> = bound_method %impl.elem0.loc9_11.1, %specific_impl_fn.loc9_11.1 [symbolic = %bound_method.loc9_11.4 (constants.%bound_method.2be)]
// CHECK:STDOUT: %I.as_type: type = facet_access_type %I.ref [symbolic = %I.binding.as_type (constants.%I.binding.as_type.24f)]
// CHECK:STDOUT: %.loc9_11.2: type = converted %I.ref, %I.as_type [symbolic = %I.binding.as_type (constants.%I.binding.as_type.24f)]
// CHECK:STDOUT: %impl.elem0.loc9_11.1: @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = impl_witness_access constants.%Interface.lookup_impl_witness.9f1, element0 [symbolic = %impl.elem0.loc9_11.3 (constants.%impl.elem0.117)]
// CHECK:STDOUT: %impl.elem0.loc9_11.2: @AccessGeneric.%.loc9_11.4 (%.b46) = impl_witness_access constants.%Copy.lookup_impl_witness.2e6, element0 [symbolic = %impl.elem0.loc9_11.4 (constants.%impl.elem0.201)]
// 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.54b)]
// CHECK:STDOUT: %specific_impl_fn.loc9_11.1: <specific function> = specific_impl_function %impl.elem0.loc9_11.2, @Copy.Op(constants.%Copy.facet.c25) [symbolic = %specific_impl_fn.loc9_11.2 (constants.%specific_impl_fn.b84)]
// CHECK:STDOUT: %bound_method.loc9_11.2: <bound method> = bound_method %impl.elem0.loc9_11.1, %specific_impl_fn.loc9_11.1 [symbolic = %bound_method.loc9_11.4 (constants.%bound_method.a76)]
// CHECK:STDOUT: %Copy.Op.call: init @AccessGeneric.%ptr.loc8_50.1 (%ptr.e8f) = call %bound_method.loc9_11.2(%impl.elem0.loc9_11.1)
// CHECK:STDOUT: return %Copy.Op.call to %return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @AccessConcrete(%I.loc12_19.2: %Interface.type.935) {
// CHECK:STDOUT: %I.loc12_19.1: %Interface.type.935 = symbolic_binding I, 0 [symbolic = %I.loc12_19.1 (constants.%I.78e)]
// CHECK:STDOUT: generic fn @AccessConcrete(%I.loc12_19.2: %Interface.type.389) {
// CHECK:STDOUT: %I.loc12_19.1: %Interface.type.389 = symbolic_binding I, 0 [symbolic = %I.loc12_19.1 (constants.%I.50d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// 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.02a)]
// 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.56a)]
// 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.a50)]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: <bound method> = bound_method %impl.elem0.loc13_11.3, constants.%ptr.as.Copy.impl.Op.624 [symbolic = %ptr.as.Copy.impl.Op.bound (constants.%ptr.as.Copy.impl.Op.bound)]
// CHECK:STDOUT: %bound_method.loc13_11.3: <bound method> = bound_method %impl.elem0.loc13_11.3, constants.%ptr.as.Copy.impl.Op.specific_fn [symbolic = %bound_method.loc13_11.3 (constants.%bound_method.289)]
// 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.78a)]
// 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.4be)]
// 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.322)]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.bound: <bound method> = bound_method %impl.elem0.loc13_11.3, constants.%ptr.as.Copy.impl.Op.011 [symbolic = %ptr.as.Copy.impl.Op.bound (constants.%ptr.as.Copy.impl.Op.bound)]
// CHECK:STDOUT: %bound_method.loc13_11.3: <bound method> = bound_method %impl.elem0.loc13_11.3, constants.%ptr.as.Copy.impl.Op.specific_fn [symbolic = %bound_method.loc13_11.3 (constants.%bound_method.06d)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> %ptr.235 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %I.ref: %Interface.type.935 = name_ref I, %I.loc12_19.2 [symbolic = %I.loc12_19.1 (constants.%I.78e)]
// CHECK:STDOUT: %I.ref: %Interface.type.389 = name_ref I, %I.loc12_19.2 [symbolic = %I.loc12_19.1 (constants.%I.50d)]
// CHECK:STDOUT: %.loc13_11.1: %Interface.assoc_type.77f = specific_constant @X.%assoc0, @Interface(constants.%i32) [concrete = constants.%assoc0.2ec]
// CHECK:STDOUT: %X.ref: %Interface.assoc_type.77f = name_ref X, %.loc13_11.1 [concrete = constants.%assoc0.2ec]
// CHECK:STDOUT: %I.as_type: type = facet_access_type %I.ref [symbolic = %I.binding.as_type (constants.%I.binding.as_type.02a)]
// CHECK:STDOUT: %.loc13_11.2: type = converted %I.ref, %I.as_type [symbolic = %I.binding.as_type (constants.%I.binding.as_type.02a)]
// CHECK:STDOUT: %impl.elem0.loc13_11.1: %ptr.235 = impl_witness_access constants.%Interface.lookup_impl_witness.56a, element0 [symbolic = %impl.elem0.loc13_11.3 (constants.%impl.elem0.a50)]
// CHECK:STDOUT: %impl.elem0.loc13_11.2: %.fef = impl_witness_access constants.%Copy.impl_witness.9c7, element0 [concrete = constants.%ptr.as.Copy.impl.Op.624]
// CHECK:STDOUT: %I.as_type: type = facet_access_type %I.ref [symbolic = %I.binding.as_type (constants.%I.binding.as_type.78a)]
// CHECK:STDOUT: %.loc13_11.2: type = converted %I.ref, %I.as_type [symbolic = %I.binding.as_type (constants.%I.binding.as_type.78a)]
// CHECK:STDOUT: %impl.elem0.loc13_11.1: %ptr.235 = impl_witness_access constants.%Interface.lookup_impl_witness.4be, element0 [symbolic = %impl.elem0.loc13_11.3 (constants.%impl.elem0.322)]
// CHECK:STDOUT: %impl.elem0.loc13_11.2: %.e6f = impl_witness_access constants.%Copy.impl_witness.843, element0 [concrete = constants.%ptr.as.Copy.impl.Op.011]
// 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)]
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0.loc13_11.2, @ptr.as.Copy.impl.Op(constants.%i32) [concrete = constants.%ptr.as.Copy.impl.Op.specific_fn]
// CHECK:STDOUT: %bound_method.loc13_11.2: <bound method> = bound_method %impl.elem0.loc13_11.1, %specific_fn [symbolic = %bound_method.loc13_11.3 (constants.%bound_method.289)]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.235 = call %bound_method.loc13_11.2(%impl.elem0.loc13_11.1) [symbolic = %impl.elem0.loc13_11.3 (constants.%impl.elem0.a50)]
// CHECK:STDOUT: %bound_method.loc13_11.2: <bound method> = bound_method %impl.elem0.loc13_11.1, %specific_fn [symbolic = %bound_method.loc13_11.3 (constants.%bound_method.06d)]
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.235 = call %bound_method.loc13_11.2(%impl.elem0.loc13_11.1) [symbolic = %impl.elem0.loc13_11.3 (constants.%impl.elem0.322)]
// CHECK:STDOUT: return %ptr.as.Copy.impl.Op.call to %return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
@@ -290,28 +290,28 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %T.loc4_21.1 => constants.%T.67d
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.048
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.6da
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.442
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.ade
// CHECK:STDOUT: %Interface.assoc_type => constants.%Interface.assoc_type.5a2
// CHECK:STDOUT: %assoc0 => constants.%assoc0.624
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @X(constants.%T.67d, constants.%Self.6da) {
// CHECK:STDOUT: specific @X(constants.%T.67d, constants.%Self.ade) {
// CHECK:STDOUT: %T => constants.%T.67d
// CHECK:STDOUT: %ptr => constants.%ptr.e8f
// CHECK:STDOUT: %require_complete => constants.%require_complete.ef1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @AccessGeneric(constants.%T.67d, constants.%I.f38) {
// CHECK:STDOUT: specific @AccessGeneric(constants.%T.67d, constants.%I.682) {
// CHECK:STDOUT: %T.loc8_18.1 => constants.%T.67d
// CHECK:STDOUT: %Interface.type.loc8_43.1 => constants.%Interface.type.048
// CHECK:STDOUT: %I.loc8_28.1 => constants.%I.f38
// CHECK:STDOUT: %pattern_type.loc8_28 => constants.%pattern_type.3b5
// CHECK:STDOUT: %Interface.type.loc8_43.1 => constants.%Interface.type.442
// CHECK:STDOUT: %I.loc8_28.1 => constants.%I.682
// CHECK:STDOUT: %pattern_type.loc8_28 => constants.%pattern_type.cbe
// CHECK:STDOUT: %ptr.loc8_50.1 => constants.%ptr.e8f
// CHECK:STDOUT: %pattern_type.loc8_46 => constants.%pattern_type.4f4
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @X(constants.%T.67d, constants.%I.f38) {
// CHECK:STDOUT: specific @X(constants.%T.67d, constants.%I.682) {
// CHECK:STDOUT: %T => constants.%T.67d
// CHECK:STDOUT: %ptr => constants.%ptr.e8f
// CHECK:STDOUT: %require_complete => constants.%require_complete.ef1
@@ -321,17 +321,17 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %T.loc4_21.1 => constants.%i32
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.935
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.0b5
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.389
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.b54
// CHECK:STDOUT: %Interface.assoc_type => constants.%Interface.assoc_type.77f
// CHECK:STDOUT: %assoc0 => constants.%assoc0.2ec
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @AccessConcrete(constants.%I.78e) {
// CHECK:STDOUT: %I.loc12_19.1 => constants.%I.78e
// CHECK:STDOUT: specific @AccessConcrete(constants.%I.50d) {
// CHECK:STDOUT: %I.loc12_19.1 => constants.%I.50d
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @X(constants.%i32, constants.%I.78e) {
// CHECK:STDOUT: specific @X(constants.%i32, constants.%I.50d) {
// CHECK:STDOUT: %T => constants.%i32
// CHECK:STDOUT: %ptr => constants.%ptr.235
// CHECK:STDOUT: %require_complete => constants.%complete_type.3d0
@@ -346,30 +346,30 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
// CHECK:STDOUT: %Interface.type.815: type = generic_interface_type @Interface [concrete]
// CHECK:STDOUT: %Interface.generic: %Interface.type.815 = struct_value () [concrete]
// CHECK:STDOUT: %Interface.type.048: type = facet_type <@Interface, @Interface(%T)> [symbolic]
// CHECK:STDOUT: %Self.6da: %Interface.type.048 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Interface.type.442: type = facet_type <@Interface, @Interface(%T)> [symbolic]
// CHECK:STDOUT: %Self.ade: %Interface.type.442 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic]
// CHECK:STDOUT: %require_complete.ef1: <witness> = require_complete_type %ptr [symbolic]
// CHECK:STDOUT: %Interface.assoc_type.5a2: type = assoc_entity_type @Interface, @Interface(%T) [symbolic]
// CHECK:STDOUT: %assoc0.624: %Interface.assoc_type.5a2 = assoc_entity element0, @Interface.%X [symbolic]
// CHECK:STDOUT: %I.f38: %Interface.type.048 = symbolic_binding I, 1 [symbolic]
// CHECK:STDOUT: %pattern_type.3b5: type = pattern_type %Interface.type.048 [symbolic]
// CHECK:STDOUT: %I.682: %Interface.type.442 = symbolic_binding I, 1 [symbolic]
// CHECK:STDOUT: %pattern_type.cbe: type = pattern_type %Interface.type.442 [symbolic]
// CHECK:STDOUT: %pattern_type.51d: type = pattern_type %T [symbolic]
// CHECK:STDOUT: %AccessMissingGeneric.type: type = fn_type @AccessMissingGeneric [concrete]
// CHECK:STDOUT: %AccessMissingGeneric: %AccessMissingGeneric.type = struct_value () [concrete]
// CHECK:STDOUT: %require_complete.944: <witness> = require_complete_type %T [symbolic]
// CHECK:STDOUT: %require_complete.428: <witness> = require_complete_type %Interface.type.048 [symbolic]
// CHECK:STDOUT: %require_complete.46e: <witness> = require_complete_type %Interface.type.442 [symbolic]
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete]
// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete]
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
// CHECK:STDOUT: %Interface.type.935: type = facet_type <@Interface, @Interface(%i32)> [concrete]
// CHECK:STDOUT: %I.78e: %Interface.type.935 = symbolic_binding I, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.772: type = pattern_type %Interface.type.935 [concrete]
// CHECK:STDOUT: %Interface.type.389: type = facet_type <@Interface, @Interface(%i32)> [concrete]
// CHECK:STDOUT: %I.50d: %Interface.type.389 = symbolic_binding I, 0 [symbolic]
// CHECK:STDOUT: %pattern_type.e2d: type = pattern_type %Interface.type.389 [concrete]
// CHECK:STDOUT: %pattern_type.7ce: type = pattern_type %i32 [concrete]
// CHECK:STDOUT: %AccessMissingConcrete.type: type = fn_type @AccessMissingConcrete [concrete]
// CHECK:STDOUT: %AccessMissingConcrete: %AccessMissingConcrete.type = struct_value () [concrete]
// CHECK:STDOUT: %Self.0b5: %Interface.type.935 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.b54: %Interface.type.389 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Interface.assoc_type.77f: type = assoc_entity_type @Interface, @Interface(%i32) [concrete]
// CHECK:STDOUT: %assoc0.2ec: %Interface.assoc_type.77f = assoc_entity element0, @Interface.%X [concrete]
// CHECK:STDOUT: }
@@ -399,38 +399,38 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT: %AccessMissingGeneric.decl: %AccessMissingGeneric.type = fn_decl @AccessMissingGeneric [concrete = constants.%AccessMissingGeneric] {
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete]
// CHECK:STDOUT: %I.patt: @AccessMissingGeneric.%pattern_type.loc8_35 (%pattern_type.3b5) = symbolic_binding_pattern I, 1 [concrete]
// CHECK:STDOUT: %I.patt: @AccessMissingGeneric.%pattern_type.loc8_35 (%pattern_type.cbe) = symbolic_binding_pattern I, 1 [concrete]
// CHECK:STDOUT: %return.patt: @AccessMissingGeneric.%pattern_type.loc8_53 (%pattern_type.51d) = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: @AccessMissingGeneric.%pattern_type.loc8_53 (%pattern_type.51d) = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref.loc8_56: type = name_ref T, %T.loc8_25.2 [symbolic = %T.loc8_25.1 (constants.%T)]
// CHECK:STDOUT: %.Self.1: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %T.loc8_25.2: type = symbolic_binding T, 0 [symbolic = %T.loc8_25.1 (constants.%T)]
// CHECK:STDOUT: %.loc8: type = splice_block %Interface.type.loc8_50.2 [symbolic = %Interface.type.loc8_50.1 (constants.%Interface.type.048)] {
// CHECK:STDOUT: %.loc8: type = splice_block %Interface.type.loc8_50.2 [symbolic = %Interface.type.loc8_50.1 (constants.%Interface.type.442)] {
// CHECK:STDOUT: %.Self.2: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Interface.ref: %Interface.type.815 = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.generic]
// CHECK:STDOUT: %T.ref.loc8_49: type = name_ref T, %T.loc8_25.2 [symbolic = %T.loc8_25.1 (constants.%T)]
// CHECK:STDOUT: %Interface.type.loc8_50.2: type = facet_type <@Interface, @Interface(constants.%T)> [symbolic = %Interface.type.loc8_50.1 (constants.%Interface.type.048)]
// CHECK:STDOUT: %Interface.type.loc8_50.2: type = facet_type <@Interface, @Interface(constants.%T)> [symbolic = %Interface.type.loc8_50.1 (constants.%Interface.type.442)]
// CHECK:STDOUT: }
// CHECK:STDOUT: %I.loc8_35.2: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.048) = symbolic_binding I, 1 [symbolic = %I.loc8_35.1 (constants.%I.f38)]
// CHECK:STDOUT: %I.loc8_35.2: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.442) = symbolic_binding I, 1 [symbolic = %I.loc8_35.1 (constants.%I.682)]
// CHECK:STDOUT: %return.param: ref @AccessMissingGeneric.%T.loc8_25.1 (%T) = out_param call_param0
// CHECK:STDOUT: %return: ref @AccessMissingGeneric.%T.loc8_25.1 (%T) = return_slot %return.param
// CHECK:STDOUT: }
// CHECK:STDOUT: %AccessMissingConcrete.decl: %AccessMissingConcrete.type = fn_decl @AccessMissingConcrete [concrete = constants.%AccessMissingConcrete] {
// CHECK:STDOUT: %I.patt: %pattern_type.772 = symbolic_binding_pattern I, 0 [concrete]
// CHECK:STDOUT: %I.patt: %pattern_type.e2d = symbolic_binding_pattern I, 0 [concrete]
// CHECK:STDOUT: %return.patt: %pattern_type.7ce = return_slot_pattern [concrete]
// CHECK:STDOUT: %return.param_patt: %pattern_type.7ce = out_param_pattern %return.patt, call_param0 [concrete]
// CHECK:STDOUT: } {
// CHECK:STDOUT: %int_32.loc16_49: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc16_49: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
// CHECK:STDOUT: %.loc16: type = splice_block %Interface.type [concrete = constants.%Interface.type.935] {
// CHECK:STDOUT: %.loc16: type = splice_block %Interface.type [concrete = constants.%Interface.type.389] {
// CHECK:STDOUT: %.Self: %type = symbolic_binding .Self [symbolic_self = constants.%.Self]
// CHECK:STDOUT: %Interface.ref: %Interface.type.815 = name_ref Interface, file.%Interface.decl [concrete = constants.%Interface.generic]
// CHECK:STDOUT: %int_32.loc16_40: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
// CHECK:STDOUT: %i32.loc16_40: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(constants.%i32)> [concrete = constants.%Interface.type.935]
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(constants.%i32)> [concrete = constants.%Interface.type.389]
// CHECK:STDOUT: }
// CHECK:STDOUT: %I.loc16_26.2: %Interface.type.935 = symbolic_binding I, 0 [symbolic = %I.loc16_26.1 (constants.%I.78e)]
// CHECK:STDOUT: %I.loc16_26.2: %Interface.type.389 = symbolic_binding I, 0 [symbolic = %I.loc16_26.1 (constants.%I.50d)]
// CHECK:STDOUT: %return.param: ref %i32 = out_param call_param0
// CHECK:STDOUT: %return: ref %i32 = return_slot %return.param
// CHECK:STDOUT: }
@@ -440,13 +440,13 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %T.loc4_21.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_21.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(%T.loc4_21.1)> [symbolic = %Interface.type (constants.%Interface.type.048)]
// CHECK:STDOUT: %Self.loc4_31.2: @Interface.%Interface.type (%Interface.type.048) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.6da)]
// CHECK:STDOUT: %Interface.type: type = facet_type <@Interface, @Interface(%T.loc4_21.1)> [symbolic = %Interface.type (constants.%Interface.type.442)]
// CHECK:STDOUT: %Self.loc4_31.2: @Interface.%Interface.type (%Interface.type.442) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.ade)]
// CHECK:STDOUT: %Interface.assoc_type: type = assoc_entity_type @Interface, @Interface(%T.loc4_21.1) [symbolic = %Interface.assoc_type (constants.%Interface.assoc_type.5a2)]
// CHECK:STDOUT: %assoc0: @Interface.%Interface.assoc_type (%Interface.assoc_type.5a2) = assoc_entity element0, %X [symbolic = %assoc0 (constants.%assoc0.624)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.048) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.6da)]
// CHECK:STDOUT: %Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.442) = symbolic_binding Self, 1 [symbolic = %Self.loc4_31.2 (constants.%Self.ade)]
// CHECK:STDOUT: %X: @X.%ptr (%ptr) = assoc_const_decl @X [concrete] {
// CHECK:STDOUT: %assoc0: @Interface.%Interface.assoc_type (%Interface.assoc_type.5a2) = assoc_entity element0, @Interface.%X [symbolic = @Interface.%assoc0 (constants.%assoc0.624)]
// CHECK:STDOUT: }
@@ -462,7 +462,7 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic assoc_const @X(@Interface.%T.loc4_21.2: type, @Interface.%Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.048)) {
// CHECK:STDOUT: generic assoc_const @X(@Interface.%T.loc4_21.2: type, @Interface.%Self.loc4_31.1: @Interface.%Interface.type (%Interface.type.442)) {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %ptr: type = ptr_type %T [symbolic = %ptr (constants.%ptr)]
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %ptr [symbolic = %require_complete (constants.%require_complete.ef1)]
@@ -470,33 +470,33 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: assoc_const X:! @X.%ptr (%ptr);
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @AccessMissingGeneric(%T.loc8_25.2: type, %I.loc8_35.2: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.048)) {
// CHECK:STDOUT: generic fn @AccessMissingGeneric(%T.loc8_25.2: type, %I.loc8_35.2: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.442)) {
// CHECK:STDOUT: %T.loc8_25.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_25.1 (constants.%T)]
// CHECK:STDOUT: %Interface.type.loc8_50.1: type = facet_type <@Interface, @Interface(%T.loc8_25.1)> [symbolic = %Interface.type.loc8_50.1 (constants.%Interface.type.048)]
// CHECK:STDOUT: %I.loc8_35.1: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.048) = symbolic_binding I, 1 [symbolic = %I.loc8_35.1 (constants.%I.f38)]
// CHECK:STDOUT: %pattern_type.loc8_35: type = pattern_type %Interface.type.loc8_50.1 [symbolic = %pattern_type.loc8_35 (constants.%pattern_type.3b5)]
// CHECK:STDOUT: %Interface.type.loc8_50.1: type = facet_type <@Interface, @Interface(%T.loc8_25.1)> [symbolic = %Interface.type.loc8_50.1 (constants.%Interface.type.442)]
// CHECK:STDOUT: %I.loc8_35.1: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.442) = symbolic_binding I, 1 [symbolic = %I.loc8_35.1 (constants.%I.682)]
// CHECK:STDOUT: %pattern_type.loc8_35: type = pattern_type %Interface.type.loc8_50.1 [symbolic = %pattern_type.loc8_35 (constants.%pattern_type.cbe)]
// CHECK:STDOUT: %pattern_type.loc8_53: type = pattern_type %T.loc8_25.1 [symbolic = %pattern_type.loc8_53 (constants.%pattern_type.51d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %require_complete.loc8: <witness> = require_complete_type %T.loc8_25.1 [symbolic = %require_complete.loc8 (constants.%require_complete.944)]
// CHECK:STDOUT: %require_complete.loc13: <witness> = require_complete_type %Interface.type.loc8_50.1 [symbolic = %require_complete.loc13 (constants.%require_complete.428)]
// CHECK:STDOUT: %require_complete.loc13: <witness> = require_complete_type %Interface.type.loc8_50.1 [symbolic = %require_complete.loc13 (constants.%require_complete.46e)]
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> %return.param: @AccessMissingGeneric.%T.loc8_25.1 (%T) {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %I.ref: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.048) = name_ref I, %I.loc8_35.2 [symbolic = %I.loc8_35.1 (constants.%I.f38)]
// CHECK:STDOUT: %I.ref: @AccessMissingGeneric.%Interface.type.loc8_50.1 (%Interface.type.442) = name_ref I, %I.loc8_35.2 [symbolic = %I.loc8_35.1 (constants.%I.682)]
// CHECK:STDOUT: %nonesuch.ref: <error> = name_ref nonesuch, <error> [concrete = <error>]
// CHECK:STDOUT: return <error> to %return
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic fn @AccessMissingConcrete(%I.loc16_26.2: %Interface.type.935) {
// CHECK:STDOUT: %I.loc16_26.1: %Interface.type.935 = symbolic_binding I, 0 [symbolic = %I.loc16_26.1 (constants.%I.78e)]
// CHECK:STDOUT: generic fn @AccessMissingConcrete(%I.loc16_26.2: %Interface.type.389) {
// CHECK:STDOUT: %I.loc16_26.1: %Interface.type.389 = symbolic_binding I, 0 [symbolic = %I.loc16_26.1 (constants.%I.50d)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT:
// CHECK:STDOUT: fn() -> %i32 {
// CHECK:STDOUT: !entry:
// CHECK:STDOUT: %I.ref: %Interface.type.935 = name_ref I, %I.loc16_26.2 [symbolic = %I.loc16_26.1 (constants.%I.78e)]
// CHECK:STDOUT: %I.ref: %Interface.type.389 = name_ref I, %I.loc16_26.2 [symbolic = %I.loc16_26.1 (constants.%I.50d)]
// CHECK:STDOUT: %nonesuch.ref: <error> = name_ref nonesuch, <error> [concrete = <error>]
// CHECK:STDOUT: return <error> to %return
// CHECK:STDOUT: }
@@ -506,23 +506,23 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %T.loc4_21.1 => constants.%T
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.048
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.6da
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.442
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.ade
// CHECK:STDOUT: %Interface.assoc_type => constants.%Interface.assoc_type.5a2
// CHECK:STDOUT: %assoc0 => constants.%assoc0.624
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @X(constants.%T, constants.%Self.6da) {
// CHECK:STDOUT: specific @X(constants.%T, constants.%Self.ade) {
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %ptr => constants.%ptr
// CHECK:STDOUT: %require_complete => constants.%require_complete.ef1
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @AccessMissingGeneric(constants.%T, constants.%I.f38) {
// CHECK:STDOUT: specific @AccessMissingGeneric(constants.%T, constants.%I.682) {
// CHECK:STDOUT: %T.loc8_25.1 => constants.%T
// CHECK:STDOUT: %Interface.type.loc8_50.1 => constants.%Interface.type.048
// CHECK:STDOUT: %I.loc8_35.1 => constants.%I.f38
// CHECK:STDOUT: %pattern_type.loc8_35 => constants.%pattern_type.3b5
// CHECK:STDOUT: %Interface.type.loc8_50.1 => constants.%Interface.type.442
// CHECK:STDOUT: %I.loc8_35.1 => constants.%I.682
// CHECK:STDOUT: %pattern_type.loc8_35 => constants.%pattern_type.cbe
// CHECK:STDOUT: %pattern_type.loc8_53 => constants.%pattern_type.51d
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -530,13 +530,13 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 {
// CHECK:STDOUT: %T.loc4_21.1 => constants.%i32
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.935
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.0b5
// CHECK:STDOUT: %Interface.type => constants.%Interface.type.389
// CHECK:STDOUT: %Self.loc4_31.2 => constants.%Self.b54
// CHECK:STDOUT: %Interface.assoc_type => constants.%Interface.assoc_type.77f
// CHECK:STDOUT: %assoc0 => constants.%assoc0.2ec
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @AccessMissingConcrete(constants.%I.78e) {
// CHECK:STDOUT: %I.loc16_26.1 => constants.%I.78e
// CHECK:STDOUT: specific @AccessMissingConcrete(constants.%I.50d) {
// CHECK:STDOUT: %I.loc16_26.1 => constants.%I.50d
// CHECK:STDOUT: }
// CHECK:STDOUT:
+74 -74
View File
@@ -274,8 +274,8 @@ interface Z(T:! type) {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete]
// CHECK:STDOUT: %Self.001: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.001 [symbolic]
// CHECK:STDOUT: %Self.c59: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.c59 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -286,7 +286,7 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Z {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.001]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.c59]
// CHECK:STDOUT: %Z.require0.decl = require_decl @Z.require0 [concrete] {
// CHECK:STDOUT: require %Self.as_type impls %Y.ref
// CHECK:STDOUT: } {
@@ -307,12 +307,12 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c59)]
// 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:
// CHECK:STDOUT: specific @Z.require0(constants.%Self.001) {
// CHECK:STDOUT: %Self => constants.%Self.001
// CHECK:STDOUT: specific @Z.require0(constants.%Self.c59) {
// CHECK:STDOUT: %Self => constants.%Self.c59
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -321,8 +321,8 @@ interface Z(T:! type) {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete]
// CHECK:STDOUT: %Self.001: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.001 [symbolic]
// CHECK:STDOUT: %Self.c59: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.c59 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -333,7 +333,7 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Z {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.001]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.c59]
// CHECK:STDOUT: %Z.require0.decl = require_decl @Z.require0 [concrete] {
// CHECK:STDOUT: require %Self.as_type impls %Y.ref
// CHECK:STDOUT: } {
@@ -353,12 +353,12 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c59)]
// 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:
// CHECK:STDOUT: specific @Z.require0(constants.%Self.001) {
// CHECK:STDOUT: %Self => constants.%Self.001
// CHECK:STDOUT: specific @Z.require0(constants.%Self.c59) {
// CHECK:STDOUT: %Self => constants.%Self.c59
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -367,8 +367,8 @@ interface Z(T:! type) {
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %Y.type: type = facet_type <@Y> [concrete]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete]
// CHECK:STDOUT: %Self.001: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.001 [symbolic]
// CHECK:STDOUT: %Self.c59: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.c59 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -379,11 +379,11 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Z {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.001]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.c59]
// CHECK:STDOUT: %Z.require0.decl = require_decl @Z.require0 [concrete] {
// CHECK:STDOUT: require %.loc9 impls %Y.ref
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.ref: %Z.type = name_ref Self, @Z.%Self [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self.ref: %Z.type = name_ref Self, @Z.%Self [symbolic = %Self (constants.%Self.c59)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc9: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y.type]
@@ -401,12 +401,12 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c59)]
// 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:
// CHECK:STDOUT: specific @Z.require0(constants.%Self.001) {
// CHECK:STDOUT: %Self => constants.%Self.001
// CHECK:STDOUT: specific @Z.require0(constants.%Self.c59) {
// CHECK:STDOUT: %Self => constants.%Self.c59
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -417,9 +417,9 @@ interface Z(T:! type) {
// CHECK:STDOUT: %C.type: type = generic_class_type @C [concrete]
// CHECK:STDOUT: %C.generic: %C.type = struct_value () [concrete]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete]
// CHECK:STDOUT: %Self.001: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.001 [symbolic]
// CHECK:STDOUT: %C.eca: type = class_type @C, @C(%Self.binding.as_type) [symbolic]
// CHECK:STDOUT: %Self.c59: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.c59 [symbolic]
// CHECK:STDOUT: %C.42e: type = class_type @C, @C(%Self.binding.as_type) [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -430,15 +430,15 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Z {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.001]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.c59]
// CHECK:STDOUT: %Z.require0.decl = require_decl @Z.require0 [concrete] {
// CHECK:STDOUT: require %C.loc9_17.1 impls %Y.ref
// CHECK:STDOUT: } {
// CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic]
// CHECK:STDOUT: %Self.ref: %Z.type = name_ref Self, @Z.%Self [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self.ref: %Z.type = name_ref Self, @Z.%Self [symbolic = %Self (constants.%Self.c59)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc9: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %C.loc9_17.1: type = class_type @C, @C(constants.%Self.binding.as_type) [symbolic = %C.loc9_17.2 (constants.%C.eca)]
// CHECK:STDOUT: %C.loc9_17.1: type = class_type @C, @C(constants.%Self.binding.as_type) [symbolic = %C.loc9_17.2 (constants.%C.42e)]
// CHECK:STDOUT: %Y.ref: type = name_ref Y, file.%Y.decl [concrete = constants.%Y.type]
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -455,15 +455,15 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c59)]
// 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: %C.loc9_17.2: type = class_type @C, @C(%Self.binding.as_type) [symbolic = %C.loc9_17.2 (constants.%C.eca)]
// CHECK:STDOUT: %C.loc9_17.2: type = class_type @C, @C(%Self.binding.as_type) [symbolic = %C.loc9_17.2 (constants.%C.42e)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Z.require0(constants.%Self.001) {
// CHECK:STDOUT: %Self => constants.%Self.001
// CHECK:STDOUT: specific @Z.require0(constants.%Self.c59) {
// CHECK:STDOUT: %Self => constants.%Self.c59
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %C.loc9_17.2 => constants.%C.eca
// CHECK:STDOUT: %C.loc9_17.2 => constants.%C.42e
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- require_impls_where.carbon
@@ -473,8 +473,8 @@ interface Z(T:! type) {
// CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete]
// CHECK:STDOUT: %assoc0: %Y.assoc_type = assoc_entity element0, @Y.%Y1 [concrete]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete]
// CHECK:STDOUT: %Self.001: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.001 [symbolic]
// CHECK:STDOUT: %Self.c59: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.c59 [symbolic]
// CHECK:STDOUT: %.Self: %Y.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self [symbolic_self]
@@ -492,7 +492,7 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Z {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.001]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.c59]
// CHECK:STDOUT: %Z.require0.decl = require_decl @Z.require0 [concrete] {
// CHECK:STDOUT: require %Self.as_type impls %.loc7_19
// CHECK:STDOUT: } {
@@ -524,12 +524,12 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c59)]
// 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:
// CHECK:STDOUT: specific @Z.require0(constants.%Self.001) {
// CHECK:STDOUT: %Self => constants.%Self.001
// CHECK:STDOUT: specific @Z.require0(constants.%Self.c59) {
// CHECK:STDOUT: %Self => constants.%Self.c59
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -540,10 +540,10 @@ interface Z(T:! type) {
// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
// CHECK:STDOUT: %Z.type.352: type = generic_interface_type @Z [concrete]
// CHECK:STDOUT: %Z.generic: %Z.type.352 = struct_value () [concrete]
// CHECK:STDOUT: %Z.type.09f: type = facet_type <@Z, @Z(%T)> [symbolic]
// CHECK:STDOUT: %Self: %Z.type.09f = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Z.type.0ed: type = facet_type <@Z, @Z(%T)> [symbolic]
// CHECK:STDOUT: %Self: %Z.type.0ed = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic]
// CHECK:STDOUT: %Z.type.6c0: type = facet_type <@Z, @Z(%Self.binding.as_type)> [symbolic]
// CHECK:STDOUT: %Z.type.6aa: type = facet_type <@Z, @Z(%Self.binding.as_type)> [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -562,21 +562,21 @@ interface Z(T:! type) {
// CHECK:STDOUT: %T.loc4_13.1: type = symbolic_binding T, 0 [symbolic = %T.loc4_13.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc4_13.1)> [symbolic = %Z.type (constants.%Z.type.09f)]
// CHECK:STDOUT: %Self.loc4_23.2: @Z.%Z.type (%Z.type.09f) = symbolic_binding Self, 1 [symbolic = %Self.loc4_23.2 (constants.%Self)]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc4_13.1)> [symbolic = %Z.type (constants.%Z.type.0ed)]
// CHECK:STDOUT: %Self.loc4_23.2: @Z.%Z.type (%Z.type.0ed) = symbolic_binding Self, 1 [symbolic = %Self.loc4_23.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc4_23.1: @Z.%Z.type (%Z.type.09f) = symbolic_binding Self, 1 [symbolic = %Self.loc4_23.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc4_23.1: @Z.%Z.type (%Z.type.0ed) = symbolic_binding Self, 1 [symbolic = %Self.loc4_23.2 (constants.%Self)]
// CHECK:STDOUT: %Z.require0.decl = require_decl @Z.require0 [concrete] {
// CHECK:STDOUT: require %T.ref impls %Z.type.loc5_25.1
// CHECK:STDOUT: } {
// CHECK:STDOUT: %T.ref: type = name_ref T, @Z.%T.loc4_13.2 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %Z.ref: %Z.type.352 = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic]
// CHECK:STDOUT: %.loc5_21: @Z.require0.%Z.type.loc5_21 (%Z.type.09f) = specific_constant @Z.%Self.loc4_23.1, @Z(constants.%T) [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.ref: @Z.require0.%Z.type.loc5_21 (%Z.type.09f) = name_ref Self, %.loc5_21 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %.loc5_21: @Z.require0.%Z.type.loc5_21 (%Z.type.0ed) = specific_constant @Z.%Self.loc4_23.1, @Z(constants.%T) [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.ref: @Z.require0.%Z.type.loc5_21 (%Z.type.0ed) = name_ref Self, %.loc5_21 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc5_25: type = converted %Self.ref, %Self.as_type [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %Z.type.loc5_25.1: type = facet_type <@Z, @Z(constants.%Self.binding.as_type)> [symbolic = %Z.type.loc5_25.2 (constants.%Z.type.6c0)]
// CHECK:STDOUT: %Z.type.loc5_25.1: type = facet_type <@Z, @Z(constants.%Self.binding.as_type)> [symbolic = %Z.type.loc5_25.2 (constants.%Z.type.6aa)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
@@ -592,12 +592,12 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require0(@Z.%T.loc4_13.2: type, @Z.%Self.loc4_23.1: @Z.%Z.type (%Z.type.09f)) {
// CHECK:STDOUT: generic require @Z.require0(@Z.%T.loc4_13.2: type, @Z.%Self.loc4_23.1: @Z.%Z.type (%Z.type.0ed)) {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %Z.type.loc5_21: type = facet_type <@Z, @Z(%T)> [symbolic = %Z.type.loc5_21 (constants.%Z.type.09f)]
// CHECK:STDOUT: %Self: @Z.require0.%Z.type.loc5_21 (%Z.type.09f) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)]
// CHECK:STDOUT: %Z.type.loc5_21: type = facet_type <@Z, @Z(%T)> [symbolic = %Z.type.loc5_21 (constants.%Z.type.0ed)]
// CHECK:STDOUT: %Self: @Z.require0.%Z.type.loc5_21 (%Z.type.0ed) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self)]
// 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: %Z.type.loc5_25.2: type = facet_type <@Z, @Z(%Self.binding.as_type)> [symbolic = %Z.type.loc5_25.2 (constants.%Z.type.6c0)]
// CHECK:STDOUT: %Z.type.loc5_25.2: type = facet_type <@Z, @Z(%Self.binding.as_type)> [symbolic = %Z.type.loc5_25.2 (constants.%Z.type.6aa)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Z(constants.%T) {
@@ -610,10 +610,10 @@ interface Z(T:! type) {
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Z.require0(constants.%T, constants.%Self) {
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %Z.type.loc5_21 => constants.%Z.type.09f
// CHECK:STDOUT: %Z.type.loc5_21 => constants.%Z.type.0ed
// CHECK:STDOUT: %Self => constants.%Self
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %Z.type.loc5_25.2 => constants.%Z.type.6c0
// CHECK:STDOUT: %Z.type.loc5_25.2 => constants.%Z.type.6aa
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: --- require_self_in_requirement.carbon
@@ -623,8 +623,8 @@ interface Z(T:! type) {
// CHECK:STDOUT: %Y.assoc_type: type = assoc_entity_type @Y [concrete]
// CHECK:STDOUT: %assoc0: %Y.assoc_type = assoc_entity element0, @Y.%Y1 [concrete]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z> [concrete]
// CHECK:STDOUT: %Self.001: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.001 [symbolic]
// CHECK:STDOUT: %Self.c59: %Z.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 0, %Self.c59 [symbolic]
// CHECK:STDOUT: %.Self: %Y.type = symbolic_binding .Self [symbolic_self]
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self [symbolic_self]
// CHECK:STDOUT: %Y.lookup_impl_witness: <witness> = lookup_impl_witness %.Self, @Y [symbolic_self]
@@ -640,7 +640,7 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @Z {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.001]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = constants.%Self.c59]
// CHECK:STDOUT: %Z.require0.decl = require_decl @Z.require0 [concrete] {
// CHECK:STDOUT: require %Self.as_type.loc10_11 impls %.loc10_19
// CHECK:STDOUT: } {
@@ -652,7 +652,7 @@ interface Z(T:! type) {
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
// CHECK:STDOUT: %.loc10_25: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access constants.%Y.lookup_impl_witness, element0 [symbolic_self = constants.%impl.elem0]
// CHECK:STDOUT: %Self.ref: %Z.type = name_ref Self, @Z.%Self [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self.ref: %Z.type = name_ref Self, @Z.%Self [symbolic = %Self (constants.%Self.c59)]
// CHECK:STDOUT: %Self.as_type.loc10_31: type = facet_access_type %Self.ref [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc10_31: type = converted %Self.ref, %Self.as_type.loc10_31 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
// CHECK:STDOUT: %.loc10_19: type = where_expr %.Self [symbolic = %Y_where.type (constants.%Y_where.type)] {
@@ -673,13 +673,13 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) {
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.001)]
// CHECK:STDOUT: %Self: %Z.type = symbolic_binding Self, 0 [symbolic = %Self (constants.%Self.c59)]
// 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: %Y_where.type: type = facet_type <@Y where constants.%impl.elem0 = %Self.binding.as_type> [symbolic = %Y_where.type (constants.%Y_where.type)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Z.require0(constants.%Self.001) {
// CHECK:STDOUT: %Self => constants.%Self.001
// CHECK:STDOUT: specific @Z.require0(constants.%Self.c59) {
// CHECK:STDOUT: %Self => constants.%Self.c59
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
// CHECK:STDOUT: %Y_where.type => constants.%Y_where.type
// CHECK:STDOUT: }
@@ -691,9 +691,9 @@ interface Z(T:! type) {
// CHECK:STDOUT: %pattern_type: type = pattern_type type [concrete]
// CHECK:STDOUT: %Z.type.352: type = generic_interface_type @Z [concrete]
// CHECK:STDOUT: %Z.generic: %Z.type.352 = struct_value () [concrete]
// CHECK:STDOUT: %Z.type.09f: type = facet_type <@Z, @Z(%T)> [symbolic]
// CHECK:STDOUT: %Self.e0a: %Z.type.09f = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.92c: type = symbolic_binding_type Self, 1, %Self.e0a [symbolic]
// CHECK:STDOUT: %Z.type.0ed: type = facet_type <@Z, @Z(%T)> [symbolic]
// CHECK:STDOUT: %Self.822: %Z.type.0ed = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Self.binding.as_type.b37: type = symbolic_binding_type Self, 1, %Self.822 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -712,18 +712,18 @@ interface Z(T:! type) {
// CHECK:STDOUT: %T.loc8_13.1: type = symbolic_binding T, 0 [symbolic = %T.loc8_13.1 (constants.%T)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc8_13.1)> [symbolic = %Z.type (constants.%Z.type.09f)]
// CHECK:STDOUT: %Self.loc8_23.2: @Z.%Z.type (%Z.type.09f) = symbolic_binding Self, 1 [symbolic = %Self.loc8_23.2 (constants.%Self.e0a)]
// CHECK:STDOUT: %Z.type: type = facet_type <@Z, @Z(%T.loc8_13.1)> [symbolic = %Z.type (constants.%Z.type.0ed)]
// CHECK:STDOUT: %Self.loc8_23.2: @Z.%Z.type (%Z.type.0ed) = symbolic_binding Self, 1 [symbolic = %Self.loc8_23.2 (constants.%Self.822)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc8_23.1: @Z.%Z.type (%Z.type.09f) = symbolic_binding Self, 1 [symbolic = %Self.loc8_23.2 (constants.%Self.e0a)]
// CHECK:STDOUT: %Self.loc8_23.1: @Z.%Z.type (%Z.type.0ed) = symbolic_binding Self, 1 [symbolic = %Self.loc8_23.2 (constants.%Self.822)]
// CHECK:STDOUT: %Z.require1.decl = require_decl @Z.require1 [concrete] {
// CHECK:STDOUT: require %Self.as_type impls %Z.type.loc11_20
// CHECK:STDOUT: } {
// CHECK:STDOUT: %Self.as_type: type = facet_access_type @Z.%Self.loc8_23.1 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.92c)]
// CHECK:STDOUT: %Self.as_type: type = facet_access_type @Z.%Self.loc8_23.1 [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.b37)]
// CHECK:STDOUT: %Z.ref: %Z.type.352 = name_ref Z, file.%Z.decl [concrete = constants.%Z.generic]
// CHECK:STDOUT: %T.ref: type = name_ref T, @Z.%T.loc8_13.2 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %Z.type.loc11_20: type = facet_type <@Z, @Z(constants.%T)> [symbolic = %Z.type.loc11_11 (constants.%Z.type.09f)]
// CHECK:STDOUT: %Z.type.loc11_20: type = facet_type <@Z, @Z(constants.%T)> [symbolic = %Z.type.loc11_11 (constants.%Z.type.0ed)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
@@ -739,21 +739,21 @@ interface Z(T:! type) {
// CHECK:STDOUT: }
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: generic require @Z.require1(@Z.%T.loc8_13.2: type, @Z.%Self.loc8_23.1: @Z.%Z.type (%Z.type.09f)) {
// CHECK:STDOUT: generic require @Z.require1(@Z.%T.loc8_13.2: type, @Z.%Self.loc8_23.1: @Z.%Z.type (%Z.type.0ed)) {
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic = %T (constants.%T)]
// CHECK:STDOUT: %Z.type.loc11_11: type = facet_type <@Z, @Z(%T)> [symbolic = %Z.type.loc11_11 (constants.%Z.type.09f)]
// CHECK:STDOUT: %Self: @Z.require1.%Z.type.loc11_11 (%Z.type.09f) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.e0a)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.92c)]
// CHECK:STDOUT: %Z.type.loc11_11: type = facet_type <@Z, @Z(%T)> [symbolic = %Z.type.loc11_11 (constants.%Z.type.0ed)]
// CHECK:STDOUT: %Self: @Z.require1.%Z.type.loc11_11 (%Z.type.0ed) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.822)]
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type.b37)]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Z(constants.%T) {
// CHECK:STDOUT: %T.loc8_13.1 => constants.%T
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @Z.require1(constants.%T, constants.%Self.e0a) {
// CHECK:STDOUT: specific @Z.require1(constants.%T, constants.%Self.822) {
// CHECK:STDOUT: %T => constants.%T
// CHECK:STDOUT: %Z.type.loc11_11 => constants.%Z.type.09f
// CHECK:STDOUT: %Self => constants.%Self.e0a
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.92c
// CHECK:STDOUT: %Z.type.loc11_11 => constants.%Z.type.0ed
// CHECK:STDOUT: %Self => constants.%Self.822
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type.b37
// CHECK:STDOUT: }
// CHECK:STDOUT:
+60 -60
View File
@@ -202,12 +202,12 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete]
// CHECK:STDOUT: %Foo.type.5ed: type = generic_interface_type @Foo [concrete]
// CHECK:STDOUT: %Foo.generic: %Foo.type.5ed = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo, @Foo(%a)> [symbolic]
// CHECK:STDOUT: %Self.c29: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo, @Foo(%a)> [symbolic]
// CHECK:STDOUT: %Self.f8c: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Bar.type.d8f: type = generic_interface_type @Bar [concrete]
// CHECK:STDOUT: %Bar.generic: %Bar.type.d8f = struct_value () [concrete]
// CHECK:STDOUT: %Bar.type.0db: type = facet_type <@Bar, @Bar(%a)> [symbolic]
// CHECK:STDOUT: %Self.ead: %Bar.type.0db = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Bar.type.c4b: type = facet_type <@Bar, @Bar(%a)> [symbolic]
// CHECK:STDOUT: %Self.0fc: %Bar.type.c4b = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -262,11 +262,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc7_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc7_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc7_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc8_22.2: @Foo.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc8_22.2 (constants.%Self.c29)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc7_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc8_22.2: @Foo.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc8_22.2 (constants.%Self.f8c)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc8_22.1: @Foo.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc8_22.2 (constants.%Self.c29)]
// CHECK:STDOUT: %Self.loc8_22.1: @Foo.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc8_22.2 (constants.%Self.f8c)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc8_22.1
@@ -280,11 +280,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc10_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc10_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Bar.type: type = facet_type <@Bar, @Bar(%a.loc10_15.1)> [symbolic = %Bar.type (constants.%Bar.type.0db)]
// CHECK:STDOUT: %Self.loc11_22.2: @Bar.%Bar.type (%Bar.type.0db) = symbolic_binding Self, 1 [symbolic = %Self.loc11_22.2 (constants.%Self.ead)]
// CHECK:STDOUT: %Bar.type: type = facet_type <@Bar, @Bar(%a.loc10_15.1)> [symbolic = %Bar.type (constants.%Bar.type.c4b)]
// CHECK:STDOUT: %Self.loc11_22.2: @Bar.%Bar.type (%Bar.type.c4b) = symbolic_binding Self, 1 [symbolic = %Self.loc11_22.2 (constants.%Self.0fc)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc11_22.1: @Bar.%Bar.type (%Bar.type.0db) = symbolic_binding Self, 1 [symbolic = %Self.loc11_22.2 (constants.%Self.ead)]
// CHECK:STDOUT: %Self.loc11_22.1: @Bar.%Bar.type (%Bar.type.c4b) = symbolic_binding Self, 1 [symbolic = %Self.loc11_22.2 (constants.%Self.0fc)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc11_22.1
@@ -322,8 +322,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete]
// CHECK:STDOUT: %Foo.type.5ed: type = generic_interface_type @Foo [concrete]
// CHECK:STDOUT: %Foo.generic: %Foo.type.5ed = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo, @Foo(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo, @Foo(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -356,11 +356,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc6_21.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_21.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc6_21.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc7_24.2: @Foo.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc6_21.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc7_24.2: @Foo.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc7_24.1: @Foo.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc7_24.1: @Foo.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc7_24.1
@@ -396,8 +396,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %Foo.generic.fda91f.1: %Foo.type.5ede67.1 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.5ede67.2: type = generic_interface_type @Foo.loc14 [concrete]
// CHECK:STDOUT: %Foo.generic.fda91f.2: %Foo.type.5ede67.2 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo.loc14, @Foo.loc14(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo.loc14, @Foo.loc14(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -436,11 +436,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc14_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc14_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc14, @Foo.loc14(%a.loc14_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc14_24.2: @Foo.loc14.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc14_24.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc14, @Foo.loc14(%a.loc14_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc14_24.2: @Foo.loc14.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc14_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc14_24.1: @Foo.loc14.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc14_24.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc14_24.1: @Foo.loc14.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc14_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc14_24.1
@@ -478,8 +478,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %pattern_type: type = pattern_type %C [concrete]
// CHECK:STDOUT: %Foo.type.5ed: type = generic_interface_type @Foo [concrete]
// CHECK:STDOUT: %Foo.generic: %Foo.type.5ed = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo, @Foo(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo, @Foo(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -512,11 +512,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc6_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc6_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc6_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc7_24.2: @Foo.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo, @Foo(%a.loc6_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc7_24.2: @Foo.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc7_24.1: @Foo.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc7_24.1: @Foo.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc7_24.1
@@ -626,14 +626,14 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %Foo.generic.fda91f.1: %Foo.type.5ede67.1 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.5ede67.2: type = generic_interface_type @Foo.loc12 [concrete]
// CHECK:STDOUT: %Foo.generic.fda91f.2: %Foo.type.5ede67.2 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo.loc12, @Foo.loc12(%a)> [symbolic]
// CHECK:STDOUT: %Self.c29: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo.loc12, @Foo.loc12(%a)> [symbolic]
// CHECK:STDOUT: %Self.f8c: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Bar.type.d8fa75.1: type = generic_interface_type @Bar.1 [concrete]
// CHECK:STDOUT: %Bar.generic.9a48ff.1: %Bar.type.d8fa75.1 = struct_value () [concrete]
// CHECK:STDOUT: %Bar.type.d8fa75.2: type = generic_interface_type @Bar.loc21 [concrete]
// CHECK:STDOUT: %Bar.generic.9a48ff.2: %Bar.type.d8fa75.2 = struct_value () [concrete]
// CHECK:STDOUT: %Bar.type.0db: type = facet_type <@Bar.loc21, @Bar.loc21(%a)> [symbolic]
// CHECK:STDOUT: %Self.ead: %Bar.type.0db = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Bar.type.c4b: type = facet_type <@Bar.loc21, @Bar.loc21(%a)> [symbolic]
// CHECK:STDOUT: %Self.0fc: %Bar.type.c4b = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -686,11 +686,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc12_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc12_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc12, @Foo.loc12(%a.loc12_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc12_22.2: @Foo.loc12.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc12_22.2 (constants.%Self.c29)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc12, @Foo.loc12(%a.loc12_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc12_22.2: @Foo.loc12.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc12_22.2 (constants.%Self.f8c)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc12_22.1: @Foo.loc12.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc12_22.2 (constants.%Self.c29)]
// CHECK:STDOUT: %Self.loc12_22.1: @Foo.loc12.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc12_22.2 (constants.%Self.f8c)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc12_22.1
@@ -710,11 +710,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc21_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc21_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Bar.type: type = facet_type <@Bar.loc21, @Bar.loc21(%a.loc21_15.1)> [symbolic = %Bar.type (constants.%Bar.type.0db)]
// CHECK:STDOUT: %Self.loc21_22.2: @Bar.loc21.%Bar.type (%Bar.type.0db) = symbolic_binding Self, 1 [symbolic = %Self.loc21_22.2 (constants.%Self.ead)]
// CHECK:STDOUT: %Bar.type: type = facet_type <@Bar.loc21, @Bar.loc21(%a.loc21_15.1)> [symbolic = %Bar.type (constants.%Bar.type.c4b)]
// CHECK:STDOUT: %Self.loc21_22.2: @Bar.loc21.%Bar.type (%Bar.type.c4b) = symbolic_binding Self, 1 [symbolic = %Self.loc21_22.2 (constants.%Self.0fc)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc21_22.1: @Bar.loc21.%Bar.type (%Bar.type.0db) = symbolic_binding Self, 1 [symbolic = %Self.loc21_22.2 (constants.%Self.ead)]
// CHECK:STDOUT: %Self.loc21_22.1: @Bar.loc21.%Bar.type (%Bar.type.c4b) = symbolic_binding Self, 1 [symbolic = %Self.loc21_22.2 (constants.%Self.0fc)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc21_22.1
@@ -762,8 +762,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %b: %C = symbolic_binding b, 0 [symbolic]
// CHECK:STDOUT: %Foo.type.5ede67.2: type = generic_interface_type @Foo.loc15 [concrete]
// CHECK:STDOUT: %Foo.generic.fda91f.2: %Foo.type.5ede67.2 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo.loc15, @Foo.loc15(%b)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo.loc15, @Foo.loc15(%b)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -805,11 +805,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %b.loc15_15.1: %C = symbolic_binding b, 0 [symbolic = %b.loc15_15.1 (constants.%b)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc15, @Foo.loc15(%b.loc15_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc15_22.2: @Foo.loc15.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc15, @Foo.loc15(%b.loc15_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc15_22.2: @Foo.loc15.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc15_22.1: @Foo.loc15.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc15_22.1: @Foo.loc15.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc15_22.1
@@ -849,8 +849,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %Foo.generic.fda91f.1: %Foo.type.5ede67.1 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.5ede67.2: type = generic_interface_type @Foo.loc15 [concrete]
// CHECK:STDOUT: %Foo.generic.fda91f.2: %Foo.type.5ede67.2 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo.loc15, @Foo.loc15(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo.loc15, @Foo.loc15(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -892,11 +892,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc15_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc15_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc15, @Foo.loc15(%a.loc15_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc15_22.2: @Foo.loc15.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc15, @Foo.loc15(%a.loc15_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc15_22.2: @Foo.loc15.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc15_22.1: @Foo.loc15.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc15_22.1: @Foo.loc15.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc15_22.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc15_22.1
@@ -936,8 +936,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %Foo.generic.fda91f.1: %Foo.type.5ede67.1 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.5ede67.2: type = generic_interface_type @Foo.loc15 [concrete]
// CHECK:STDOUT: %Foo.generic.fda91f.2: %Foo.type.5ede67.2 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo.loc15, @Foo.loc15(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo.loc15, @Foo.loc15(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -979,11 +979,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc15_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc15_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc15, @Foo.loc15(%a.loc15_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc15_24.2: @Foo.loc15.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc15_24.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc15, @Foo.loc15(%a.loc15_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc15_24.2: @Foo.loc15.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc15_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc15_24.1: @Foo.loc15.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc15_24.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc15_24.1: @Foo.loc15.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc15_24.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc15_24.1
@@ -1072,8 +1072,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %Foo.generic.fda91f.1: %Foo.type.5ede67.1 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.5ede67.2: type = generic_interface_type @Foo.loc17 [concrete]
// CHECK:STDOUT: %Foo.generic.fda91f.2: %Foo.type.5ede67.2 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.fdb: type = facet_type <@Foo.loc17, @Foo.loc17(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.fdb = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.6f9: type = facet_type <@Foo.loc17, @Foo.loc17(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.6f9 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: imports {
@@ -1115,11 +1115,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc17_15.1: %C = symbolic_binding a, 0 [symbolic = %a.loc17_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc17, @Foo.loc17(%a.loc17_15.1)> [symbolic = %Foo.type (constants.%Foo.type.fdb)]
// CHECK:STDOUT: %Self.loc17_22.2: @Foo.loc17.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc17_22.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc17, @Foo.loc17(%a.loc17_15.1)> [symbolic = %Foo.type (constants.%Foo.type.6f9)]
// CHECK:STDOUT: %Self.loc17_22.2: @Foo.loc17.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc17_22.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc17_22.1: @Foo.loc17.%Foo.type (%Foo.type.fdb) = symbolic_binding Self, 1 [symbolic = %Self.loc17_22.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc17_22.1: @Foo.loc17.%Foo.type (%Foo.type.6f9) = symbolic_binding Self, 1 [symbolic = %Self.loc17_22.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc17_22.1
@@ -1159,8 +1159,8 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %Foo.generic.fda91f.1: %Foo.type.5ede67.1 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.5ede67.2: type = generic_interface_type @Foo.loc18 [concrete]
// CHECK:STDOUT: %Foo.generic.fda91f.2: %Foo.type.5ede67.2 = struct_value () [concrete]
// CHECK:STDOUT: %Foo.type.500: type = facet_type <@Foo.loc18, @Foo.loc18(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.500 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: %Foo.type.442: type = facet_type <@Foo.loc18, @Foo.loc18(%a)> [symbolic]
// CHECK:STDOUT: %Self: %Foo.type.442 = symbolic_binding Self, 1 [symbolic]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -1202,11 +1202,11 @@ interface Foo(a:! const (const C)) {}
// CHECK:STDOUT: %a.loc18_15.1: %const = symbolic_binding a, 0 [symbolic = %a.loc18_15.1 (constants.%a)]
// CHECK:STDOUT:
// CHECK:STDOUT: !definition:
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc18, @Foo.loc18(%a.loc18_15.1)> [symbolic = %Foo.type (constants.%Foo.type.500)]
// CHECK:STDOUT: %Self.loc18_36.2: @Foo.loc18.%Foo.type (%Foo.type.500) = symbolic_binding Self, 1 [symbolic = %Self.loc18_36.2 (constants.%Self)]
// CHECK:STDOUT: %Foo.type: type = facet_type <@Foo.loc18, @Foo.loc18(%a.loc18_15.1)> [symbolic = %Foo.type (constants.%Foo.type.442)]
// CHECK:STDOUT: %Self.loc18_36.2: @Foo.loc18.%Foo.type (%Foo.type.442) = symbolic_binding Self, 1 [symbolic = %Self.loc18_36.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: interface {
// CHECK:STDOUT: %Self.loc18_36.1: @Foo.loc18.%Foo.type (%Foo.type.500) = symbolic_binding Self, 1 [symbolic = %Self.loc18_36.2 (constants.%Self)]
// CHECK:STDOUT: %Self.loc18_36.1: @Foo.loc18.%Foo.type (%Foo.type.442) = symbolic_binding Self, 1 [symbolic = %Self.loc18_36.2 (constants.%Self)]
// CHECK:STDOUT:
// CHECK:STDOUT: !members:
// CHECK:STDOUT: .Self = %Self.loc18_36.1
@@ -27,7 +27,7 @@ interface I {
// CHECK:STDOUT:
// CHECK:STDOUT: constants {
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
// CHECK:STDOUT: %Self.dba: %I.type = symbolic_binding Self, 0 [symbolic]
// CHECK:STDOUT: %Self.ab9: %I.type = symbolic_binding Self, 0 [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]
@@ -48,18 +48,18 @@ interface I {
// CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete]
// CHECK:STDOUT: %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete]
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.cc7 = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.type.d14: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
// CHECK:STDOUT: %ImplicitAs.type.e8c: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
// CHECK:STDOUT: %ImplicitAs.Convert.type.1b6: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%i32) [concrete]
// CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.412: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.740: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.412 = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.impl_witness.57f: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.8c3, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.84b: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.84b = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.d14 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.57f) [concrete]
// CHECK:STDOUT: %.dbf: type = fn_type_with_self_type %ImplicitAs.Convert.type.1b6, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0 [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6 = struct_value () [symbolic]
// CHECK:STDOUT: %ImplicitAs.impl_witness.6bc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%int_32) [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d = struct_value () [concrete]
// CHECK:STDOUT: %ImplicitAs.facet: %ImplicitAs.type.e8c = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.6bc) [concrete]
// CHECK:STDOUT: %.863: type = fn_type_with_self_type %ImplicitAs.Convert.type.1b6, %ImplicitAs.facet [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete]
// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete]
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
// CHECK:STDOUT: %int_42.c68: %i32 = int_value 42 [concrete]
// CHECK:STDOUT: }
@@ -73,8 +73,8 @@ interface I {
// CHECK:STDOUT: }
// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
// CHECK:STDOUT: %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
// CHECK:STDOUT: %Core.import_ref.1b5: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.412) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.740)]
// CHECK:STDOUT: %ImplicitAs.impl_witness_table.8c3 = impl_witness_table (%Core.import_ref.1b5), @Core.IntLiteral.as.ImplicitAs.impl [concrete]
// CHECK:STDOUT: %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)]
// CHECK:STDOUT: %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
@@ -87,7 +87,7 @@ interface I {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: interface @I {
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.dba]
// CHECK:STDOUT: %Self: %I.type = symbolic_binding Self, 0 [symbolic = constants.%Self.ab9]
// CHECK:STDOUT: %I.F.decl: %I.F.type = fn_decl @I.F [concrete = constants.%I.F] {} {}
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, %I.F.decl [concrete = constants.%assoc0.524]
// CHECK:STDOUT: %I.G.decl: %I.G.type = fn_decl @I.G [concrete = constants.%I.G] {
@@ -128,7 +128,7 @@ interface I {
// CHECK:STDOUT: %N: %i32 = assoc_const_decl @N [concrete] {
// CHECK:STDOUT: %assoc3: %I.assoc_type = assoc_entity element3, @I.%N [concrete = constants.%assoc3]
// CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e]
// CHECK:STDOUT: %impl.elem0: %.dbf = impl_witness_access constants.%ImplicitAs.impl_witness.57f, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.6f0]
// CHECK:STDOUT: %impl.elem0: %.863 = impl_witness_access constants.%ImplicitAs.impl_witness.6bc, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5]
// CHECK:STDOUT: %bound_method.loc23_19.1: <bound method> = bound_method %int_42, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound]
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc23_19.2: <bound method> = bound_method %int_42, %specific_fn [concrete = constants.%bound_method]
@@ -175,11 +175,11 @@ interface I {
// CHECK:STDOUT: fn(%a.param: %i32, %b.param: %i32) -> %i32 = "int.sadd";
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.F(constants.%Self.dba) {}
// CHECK:STDOUT: specific @I.F(constants.%Self.ab9) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @I.G(constants.%Self.dba) {}
// CHECK:STDOUT: specific @I.G(constants.%Self.ab9) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @T(constants.%Self.dba) {}
// CHECK:STDOUT: specific @T(constants.%Self.ab9) {}
// CHECK:STDOUT:
// CHECK:STDOUT: specific @N(constants.%Self.dba) {}
// CHECK:STDOUT: specific @N(constants.%Self.ab9) {}
// CHECK:STDOUT: