mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
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:
+46
-46
@@ -188,8 +188,8 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
|
||||
// CHECK:STDOUT: %.Self.7a5: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.7a5 [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.1dc: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.1dc [symbolic_self]
|
||||
// CHECK:STDOUT: %T: %I.type = symbolic_binding T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %I.type [concrete]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
@@ -209,7 +209,7 @@ fn F() {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc7_18: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc7_12.2: type = where_expr %.Self.2 [concrete = constants.%I.type] {
|
||||
@@ -226,7 +226,7 @@ fn F() {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %Type.ref: type = name_ref Type, file.%Type [concrete = type]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc13_18: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -263,8 +263,8 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
|
||||
// CHECK:STDOUT: %.Self.7a5: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.7a5 [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.1dc: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.1dc [symbolic_self]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -280,7 +280,7 @@ fn F() {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %J.ref: <error> = name_ref J, <error> [concrete = <error>]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc14_18: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -306,27 +306,27 @@ fn F() {
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
|
||||
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%Member [concrete]
|
||||
// CHECK:STDOUT: %.Self.7a5: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.1dc: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
|
||||
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
|
||||
// CHECK:STDOUT: %I_where.type.849: type = facet_type <@I where TODO> [concrete]
|
||||
// CHECK:STDOUT: %U: %I_where.type.849 = symbolic_binding U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.59d: type = pattern_type %I_where.type.849 [concrete]
|
||||
// CHECK:STDOUT: %I_where.type.310: type = facet_type <@I where TODO> [concrete]
|
||||
// CHECK:STDOUT: %U: %I_where.type.310 = symbolic_binding U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.092: type = pattern_type %I_where.type.310 [concrete]
|
||||
// CHECK:STDOUT: %EqualEqual.type: type = fn_type @EqualEqual [concrete]
|
||||
// CHECK:STDOUT: %EqualEqual: %EqualEqual.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.Self.945: %J.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.9e9: type = symbolic_binding_type .Self, %.Self.945 [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.2fa: %J.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.ac6: type = symbolic_binding_type .Self, %.Self.2fa [symbolic_self]
|
||||
// CHECK:STDOUT: %J_where.type: type = facet_type <@J where .Self impls @I> [concrete]
|
||||
// CHECK:STDOUT: %V: %J_where.type = symbolic_binding V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.523: type = pattern_type %J_where.type [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.2e5: type = pattern_type %J_where.type [concrete]
|
||||
// CHECK:STDOUT: %Impls.type: type = fn_type @Impls [concrete]
|
||||
// CHECK:STDOUT: %Impls: %Impls.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.ce7: type = symbolic_binding_type .Self, %.Self.7a5 [symbolic_self]
|
||||
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.7a5, @I [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.15d: type = symbolic_binding_type .Self, %.Self.1dc [symbolic_self]
|
||||
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.1dc, @I [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %I_where.type.311: type = facet_type <@I where .Self impls @J and TODO> [concrete]
|
||||
// CHECK:STDOUT: %W: %I_where.type.311 = symbolic_binding W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.e40: type = pattern_type %I_where.type.311 [concrete]
|
||||
// CHECK:STDOUT: %I_where.type.ac1: type = facet_type <@I where .Self impls @J and TODO> [concrete]
|
||||
// CHECK:STDOUT: %W: %I_where.type.ac1 = symbolic_binding W, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.409: type = pattern_type %I_where.type.ac1 [concrete]
|
||||
// CHECK:STDOUT: %And.type: type = fn_type @And [concrete]
|
||||
// CHECK:STDOUT: %And: %And.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -336,32 +336,32 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %EqualEqual.decl: %EqualEqual.type = fn_decl @EqualEqual [concrete = constants.%EqualEqual] {
|
||||
// CHECK:STDOUT: %U.patt: %pattern_type.59d = symbolic_binding_pattern U, 0 [concrete]
|
||||
// CHECK:STDOUT: %U.patt: %pattern_type.092 = symbolic_binding_pattern U, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc12_21.1: type = splice_block %.loc12_21.2 [concrete = constants.%I_where.type.849] {
|
||||
// CHECK:STDOUT: %.loc12_21.1: type = splice_block %.loc12_21.2 [concrete = constants.%I_where.type.310] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %.loc12_37: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
|
||||
// CHECK:STDOUT: %.loc12_21.2: type = where_expr %.Self.2 [concrete = constants.%I_where.type.849] {
|
||||
// CHECK:STDOUT: %.loc12_21.2: type = where_expr %.Self.2 [concrete = constants.%I_where.type.310] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%I.type
|
||||
// CHECK:STDOUT: requirement_equivalent %.Self.ref, %.loc12_37
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U.loc12_15.2: %I_where.type.849 = symbolic_binding U, 0 [symbolic = %U.loc12_15.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %U.loc12_15.2: %I_where.type.310 = symbolic_binding U, 0 [symbolic = %U.loc12_15.1 (constants.%U)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Impls.decl: %Impls.type = fn_decl @Impls [concrete = constants.%Impls] {
|
||||
// CHECK:STDOUT: %V.patt: %pattern_type.523 = symbolic_binding_pattern V, 0 [concrete]
|
||||
// CHECK:STDOUT: %V.patt: %pattern_type.2e5 = symbolic_binding_pattern V, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc14_16.1: type = splice_block %.loc14_16.2 [concrete = constants.%J_where.type] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.945]
|
||||
// CHECK:STDOUT: %.Self.ref: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.2fa]
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type.9e9]
|
||||
// CHECK:STDOUT: %.loc14_22: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type.9e9]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type.ac6]
|
||||
// CHECK:STDOUT: %.loc14_22: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type.ac6]
|
||||
// CHECK:STDOUT: %.loc14_16.2: type = where_expr %.Self.2 [concrete = constants.%J_where.type] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%J.type
|
||||
// CHECK:STDOUT: requirement_impls %.loc14_22, %I.ref
|
||||
@@ -370,34 +370,34 @@ fn F() {
|
||||
// CHECK:STDOUT: %V.loc14_10.2: %J_where.type = symbolic_binding V, 0 [symbolic = %V.loc14_10.1 (constants.%V)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %And.decl: %And.type = fn_decl @And [concrete = constants.%And] {
|
||||
// CHECK:STDOUT: %W.patt: %pattern_type.e40 = symbolic_binding_pattern W, 0 [concrete]
|
||||
// CHECK:STDOUT: %W.patt: %pattern_type.409 = symbolic_binding_pattern W, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc16_14.1: type = splice_block %.loc16_14.2 [concrete = constants.%I_where.type.311] {
|
||||
// CHECK:STDOUT: %.loc16_14.1: type = splice_block %.loc16_14.2 [concrete = constants.%I_where.type.ac1] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref.loc16_20: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.ref.loc16_20: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc16_20: type = facet_access_type %.Self.ref.loc16_20 [symbolic_self = constants.%.Self.binding.as_type.ce7]
|
||||
// CHECK:STDOUT: %.loc16_20: type = converted %.Self.ref.loc16_20, %.Self.as_type.loc16_20 [symbolic_self = constants.%.Self.binding.as_type.ce7]
|
||||
// CHECK:STDOUT: %.Self.ref.loc16_38: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc16_20: type = facet_access_type %.Self.ref.loc16_20 [symbolic_self = constants.%.Self.binding.as_type.15d]
|
||||
// CHECK:STDOUT: %.loc16_20: type = converted %.Self.ref.loc16_20, %.Self.as_type.loc16_20 [symbolic_self = constants.%.Self.binding.as_type.15d]
|
||||
// CHECK:STDOUT: %.Self.ref.loc16_38: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %Member.ref: %I.assoc_type = name_ref Member, @Member.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc16_38: type = facet_access_type %.Self.ref.loc16_38 [symbolic_self = constants.%.Self.binding.as_type.ce7]
|
||||
// CHECK:STDOUT: %.loc16_38: type = converted %.Self.ref.loc16_38, %.Self.as_type.loc16_38 [symbolic_self = constants.%.Self.binding.as_type.ce7]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc16_38: type = facet_access_type %.Self.ref.loc16_38 [symbolic_self = constants.%.Self.binding.as_type.15d]
|
||||
// CHECK:STDOUT: %.loc16_38: type = converted %.Self.ref.loc16_38, %.Self.as_type.loc16_38 [symbolic_self = constants.%.Self.binding.as_type.15d]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access constants.%I.lookup_impl_witness, element0 [symbolic_self = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %.loc16_50: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
|
||||
// CHECK:STDOUT: %.loc16_14.2: type = where_expr %.Self.2 [concrete = constants.%I_where.type.311] {
|
||||
// CHECK:STDOUT: %.loc16_14.2: type = where_expr %.Self.2 [concrete = constants.%I_where.type.ac1] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%I.type
|
||||
// CHECK:STDOUT: requirement_impls %.loc16_20, %J.ref
|
||||
// CHECK:STDOUT: requirement_equivalent %impl.elem0, %.loc16_50
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %W.loc16_8.2: %I_where.type.311 = symbolic_binding W, 0 [symbolic = %W.loc16_8.1 (constants.%W)]
|
||||
// CHECK:STDOUT: %W.loc16_8.2: %I_where.type.ac1 = symbolic_binding W, 0 [symbolic = %W.loc16_8.1 (constants.%W)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @EqualEqual(%U.loc12_15.2: %I_where.type.849) {
|
||||
// CHECK:STDOUT: %U.loc12_15.1: %I_where.type.849 = symbolic_binding U, 0 [symbolic = %U.loc12_15.1 (constants.%U)]
|
||||
// CHECK:STDOUT: generic fn @EqualEqual(%U.loc12_15.2: %I_where.type.310) {
|
||||
// CHECK:STDOUT: %U.loc12_15.1: %I_where.type.310 = symbolic_binding U, 0 [symbolic = %U.loc12_15.1 (constants.%U)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -408,8 +408,8 @@ fn F() {
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @And(%W.loc16_8.2: %I_where.type.311) {
|
||||
// CHECK:STDOUT: %W.loc16_8.1: %I_where.type.311 = symbolic_binding W, 0 [symbolic = %W.loc16_8.1 (constants.%W)]
|
||||
// CHECK:STDOUT: generic fn @And(%W.loc16_8.2: %I_where.type.ac1) {
|
||||
// CHECK:STDOUT: %W.loc16_8.1: %I_where.type.ac1 = symbolic_binding W, 0 [symbolic = %W.loc16_8.1 (constants.%W)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -434,9 +434,9 @@ fn F() {
|
||||
// CHECK:STDOUT: %K.type: type = facet_type <@K> [concrete]
|
||||
// CHECK:STDOUT: %K.assoc_type: type = assoc_entity_type @K [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %K.assoc_type = assoc_entity element0, @K.%Associated [concrete]
|
||||
// CHECK:STDOUT: %.Self.eef: %K.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.eef [symbolic_self]
|
||||
// CHECK:STDOUT: %K.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.eef, @K [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.2ca: %K.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.2ca [symbolic_self]
|
||||
// CHECK:STDOUT: %K.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.2ca, @K [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0: %L.type = impl_witness_access %K.lookup_impl_witness, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %as_type: type = facet_access_type %impl.elem0 [symbolic_self]
|
||||
// CHECK:STDOUT: %K_where.type: type = facet_type <@K where TODO> [concrete]
|
||||
@@ -457,7 +457,7 @@ fn F() {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %K.ref: type = name_ref K, file.%K.decl [concrete = constants.%K.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %K.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.eef]
|
||||
// CHECK:STDOUT: %.Self.ref: %K.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.2ca]
|
||||
// CHECK:STDOUT: %Associated.ref: %K.assoc_type = name_ref Associated, @Associated.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc12_36.1: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
|
||||
|
||||
+10
-10
@@ -139,16 +139,16 @@ fn G(T:! type where C(()) impls I(.Self)) {}
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I> [concrete]
|
||||
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.%Member [concrete]
|
||||
// CHECK:STDOUT: %.Self.7a5: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.1dc: %I.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete]
|
||||
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
|
||||
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [concrete]
|
||||
// CHECK:STDOUT: %T: %I_where.type = symbolic_binding T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.59d: type = pattern_type %I_where.type [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.092: type = pattern_type %I_where.type [concrete]
|
||||
// CHECK:STDOUT: %PeriodSelf.type: type = fn_type @PeriodSelf [concrete]
|
||||
// CHECK:STDOUT: %PeriodSelf: %PeriodSelf.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.7a5 [symbolic_self]
|
||||
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.7a5, @I [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.1dc [symbolic_self]
|
||||
// CHECK:STDOUT: %I.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.1dc, @I [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access %I.lookup_impl_witness, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %U: %I_where.type = symbolic_binding U, 0 [symbolic]
|
||||
// CHECK:STDOUT: %PeriodMember.type: type = fn_type @PeriodMember [concrete]
|
||||
@@ -156,7 +156,7 @@ fn G(T:! type where C(()) impls I(.Self)) {}
|
||||
// CHECK:STDOUT: %.Self.16f: type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %type_where: type = facet_type <type where .Self impls @I> [concrete]
|
||||
// CHECK:STDOUT: %V: %type_where = symbolic_binding V, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.915: type = pattern_type %type_where [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.17f: type = pattern_type %type_where [concrete]
|
||||
// CHECK:STDOUT: %TypeSelfImpls.type: type = fn_type @TypeSelfImpls [concrete]
|
||||
// CHECK:STDOUT: %TypeSelfImpls: %TypeSelfImpls.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -166,13 +166,13 @@ fn G(T:! type where C(()) impls I(.Self)) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %PeriodSelf.decl: %PeriodSelf.type = fn_decl @PeriodSelf [concrete = constants.%PeriodSelf] {
|
||||
// CHECK:STDOUT: %T.patt: %pattern_type.59d = symbolic_binding_pattern T, 0 [concrete]
|
||||
// CHECK:STDOUT: %T.patt: %pattern_type.092 = symbolic_binding_pattern T, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc9_21.1: type = splice_block %.loc9_21.2 [concrete = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %.loc9_37: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
|
||||
// CHECK:STDOUT: %.loc9_21.2: type = where_expr %.Self.2 [concrete = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%I.type
|
||||
@@ -182,13 +182,13 @@ fn G(T:! type where C(()) impls I(.Self)) {}
|
||||
// CHECK:STDOUT: %T.loc9_15.2: %I_where.type = symbolic_binding T, 0 [symbolic = %T.loc9_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %PeriodMember.decl: %PeriodMember.type = fn_decl @PeriodMember [concrete = constants.%PeriodMember] {
|
||||
// CHECK:STDOUT: %U.patt: %pattern_type.59d = symbolic_binding_pattern U, 0 [concrete]
|
||||
// CHECK:STDOUT: %U.patt: %pattern_type.092 = symbolic_binding_pattern U, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc11_23.1: type = splice_block %.loc11_23.2 [concrete = constants.%I_where.type] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7a5]
|
||||
// CHECK:STDOUT: %.Self.ref: %I.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.1dc]
|
||||
// CHECK:STDOUT: %Member.ref: %I.assoc_type = name_ref Member, @Member.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc11_29: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -202,7 +202,7 @@ fn G(T:! type where C(()) impls I(.Self)) {}
|
||||
// CHECK:STDOUT: %U.loc11_17.2: %I_where.type = symbolic_binding U, 0 [symbolic = %U.loc11_17.1 (constants.%U)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %TypeSelfImpls.decl: %TypeSelfImpls.type = fn_decl @TypeSelfImpls [concrete = constants.%TypeSelfImpls] {
|
||||
// CHECK:STDOUT: %V.patt: %pattern_type.915 = symbolic_binding_pattern V, 0 [concrete]
|
||||
// CHECK:STDOUT: %V.patt: %pattern_type.17f = symbolic_binding_pattern V, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc13_27.1: type = splice_block %.loc13_27.2 [concrete = constants.%type_where] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
|
||||
+56
-56
@@ -32,35 +32,35 @@ fn G(U: Empty(i32) where .A = i32*) {
|
||||
// CHECK:STDOUT: %Empty.type.d36: type = generic_interface_type @Empty [concrete]
|
||||
// CHECK:STDOUT: %Empty.generic: %Empty.type.d36 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %T: type = symbolic_binding T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Empty.type.e63200.2: type = facet_type <@Empty, @Empty(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %.Self.86d: %Empty.type.e63200.2 = symbolic_binding .Self [symbolic]
|
||||
// CHECK:STDOUT: %Empty.type.6f76f1.2: type = facet_type <@Empty, @Empty(%T)> [symbolic]
|
||||
// CHECK:STDOUT: %.Self.b4b: %Empty.type.6f76f1.2 = symbolic_binding .Self [symbolic]
|
||||
// CHECK:STDOUT: %Empty.assoc_type.ce4b5a.2: type = assoc_entity_type @Empty, @Empty(%T) [symbolic]
|
||||
// CHECK:STDOUT: %assoc0.a20ab5.2: %Empty.assoc_type.ce4b5a.2 = assoc_entity element0, @Empty.%A [symbolic]
|
||||
// CHECK:STDOUT: %require_complete.9a5: <witness> = require_complete_type %Empty.type.e63200.2 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.ae0: type = symbolic_binding_type .Self, %.Self.86d [symbolic]
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness.beb: <witness> = lookup_impl_witness %.Self.86d, @Empty, @Empty(%T) [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0.7d7: type = impl_witness_access %Empty.lookup_impl_witness.beb, element0 [symbolic]
|
||||
// CHECK:STDOUT: %require_complete.8eb: <witness> = require_complete_type %Empty.type.6f76f1.2 [symbolic]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.b61: type = symbolic_binding_type .Self, %.Self.b4b [symbolic]
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness.177: <witness> = lookup_impl_witness %.Self.b4b, @Empty, @Empty(%T) [symbolic]
|
||||
// CHECK:STDOUT: %impl.elem0.de5: type = impl_witness_access %Empty.lookup_impl_witness.177, element0 [symbolic]
|
||||
// CHECK:STDOUT: %ptr.e8f: type = ptr_type %T [symbolic]
|
||||
// CHECK:STDOUT: %Empty_where.type.334: type = facet_type <@Empty, @Empty(%T) where %impl.elem0.7d7 = %ptr.e8f> [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.649: type = pattern_type %Empty_where.type.334 [symbolic]
|
||||
// CHECK:STDOUT: %Empty_where.type.2dc: type = facet_type <@Empty, @Empty(%T) where %impl.elem0.de5 = %ptr.e8f> [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.bb3: type = pattern_type %Empty_where.type.2dc [symbolic]
|
||||
// CHECK:STDOUT: %V: type = symbolic_binding V, 1 [symbolic]
|
||||
// CHECK:STDOUT: %H.type: type = fn_type @H [concrete]
|
||||
// CHECK:STDOUT: %H: %H.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %require_complete.6ec: <witness> = require_complete_type %Empty_where.type.334 [symbolic]
|
||||
// CHECK:STDOUT: %require_complete.6bc: <witness> = require_complete_type %Empty_where.type.2dc [symbolic]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %Empty.type.f62: type = facet_type <@Empty, @Empty(%i32)> [concrete]
|
||||
// CHECK:STDOUT: %.Self.101: %Empty.type.f62 = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %Empty.type.4fb: type = facet_type <@Empty, @Empty(%i32)> [concrete]
|
||||
// CHECK:STDOUT: %.Self.ec6: %Empty.type.4fb = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %Empty.assoc_type.623: type = assoc_entity_type @Empty, @Empty(%i32) [concrete]
|
||||
// CHECK:STDOUT: %assoc0.333: %Empty.assoc_type.623 = assoc_entity element0, @Empty.%A [concrete]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.534: type = symbolic_binding_type .Self, %.Self.101 [symbolic_self]
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness.543: <witness> = lookup_impl_witness %.Self.101, @Empty, @Empty(%i32) [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0.d49: type = impl_witness_access %Empty.lookup_impl_witness.543, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type.63c: type = symbolic_binding_type .Self, %.Self.ec6 [symbolic_self]
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness.924: <witness> = lookup_impl_witness %.Self.ec6, @Empty, @Empty(%i32) [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0.238: type = impl_witness_access %Empty.lookup_impl_witness.924, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %ptr.235: type = ptr_type %i32 [concrete]
|
||||
// CHECK:STDOUT: %Empty_where.type.823: type = facet_type <@Empty, @Empty(%i32) where %impl.elem0.d49 = %ptr.235> [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.3bd: type = pattern_type %Empty_where.type.823 [concrete]
|
||||
// CHECK:STDOUT: %complete_type.695: <witness> = complete_type_witness %Empty.type.f62 [concrete]
|
||||
// CHECK:STDOUT: %complete_type.98a: <witness> = complete_type_witness %Empty_where.type.823 [concrete]
|
||||
// CHECK:STDOUT: %Empty_where.type.729: type = facet_type <@Empty, @Empty(%i32) where %impl.elem0.238 = %ptr.235> [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.ee5: type = pattern_type %Empty_where.type.729 [concrete]
|
||||
// CHECK:STDOUT: %complete_type.ba8: <witness> = complete_type_witness %Empty.type.4fb [concrete]
|
||||
// CHECK:STDOUT: %complete_type.863: <witness> = complete_type_witness %Empty_where.type.729 [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -69,32 +69,32 @@ fn G(U: Empty(i32) where .A = i32*) {
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] {
|
||||
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete]
|
||||
// CHECK:STDOUT: %U.patt: @H.%pattern_type (%pattern_type.649) = value_binding_pattern U [concrete]
|
||||
// CHECK:STDOUT: %U.param_patt: @H.%pattern_type (%pattern_type.649) = value_param_pattern %U.patt, call_param0 [concrete]
|
||||
// CHECK:STDOUT: %U.patt: @H.%pattern_type (%pattern_type.bb3) = value_binding_pattern U [concrete]
|
||||
// CHECK:STDOUT: %U.param_patt: @H.%pattern_type (%pattern_type.bb3) = value_param_pattern %U.patt, call_param0 [concrete]
|
||||
// CHECK:STDOUT: %V.patt: %pattern_type.98f = symbolic_binding_pattern V, 1 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %T.loc21_6.2: type = symbolic_binding T, 0 [symbolic = %T.loc21_6.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.param: @H.%Empty_where.type (%Empty_where.type.334) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc21_28.1: type = splice_block %.loc21_28.2 [symbolic = %Empty_where.type (constants.%Empty_where.type.334)] {
|
||||
// CHECK:STDOUT: %U.param: @H.%Empty_where.type (%Empty_where.type.2dc) = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc21_28.1: type = splice_block %.loc21_28.2 [symbolic = %Empty_where.type (constants.%Empty_where.type.2dc)] {
|
||||
// CHECK:STDOUT: %Empty.ref: %Empty.type.d36 = name_ref Empty, file.%Empty.decl [concrete = constants.%Empty.generic]
|
||||
// CHECK:STDOUT: %T.ref.loc21_25: type = name_ref T, %T.loc21_6.2 [symbolic = %T.loc21_6.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.2: type = facet_type <@Empty, @Empty(constants.%T)> [symbolic = %Empty.type.loc21_26.1 (constants.%Empty.type.e63200.2)]
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.2: type = facet_type <@Empty, @Empty(constants.%T)> [symbolic = %Empty.type.loc21_26.1 (constants.%Empty.type.6f76f1.2)]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: @H.%Empty.type.loc21_26.1 (%Empty.type.e63200.2) = name_ref .Self, %.Self.4 [symbolic = %.Self.1 (constants.%.Self.86d)]
|
||||
// CHECK:STDOUT: %.Self.ref: @H.%Empty.type.loc21_26.1 (%Empty.type.6f76f1.2) = name_ref .Self, %.Self.4 [symbolic = %.Self.1 (constants.%.Self.b4b)]
|
||||
// CHECK:STDOUT: %.loc21_34.1: @H.%Empty.assoc_type (%Empty.assoc_type.ce4b5a.2) = specific_constant @A.%assoc0, @Empty(constants.%T) [symbolic = %assoc0 (constants.%assoc0.a20ab5.2)]
|
||||
// CHECK:STDOUT: %A.ref: @H.%Empty.assoc_type (%Empty.assoc_type.ce4b5a.2) = name_ref A, %.loc21_34.1 [symbolic = %assoc0 (constants.%assoc0.a20ab5.2)]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic = %.Self.binding.as_type (constants.%.Self.binding.as_type.ae0)]
|
||||
// CHECK:STDOUT: %.loc21_34.2: type = converted %.Self.ref, %.Self.as_type [symbolic = %.Self.binding.as_type (constants.%.Self.binding.as_type.ae0)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.2: type = impl_witness_access constants.%Empty.lookup_impl_witness.beb, element0 [symbolic = %impl.elem0.loc21_34.1 (constants.%impl.elem0.7d7)]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic = %.Self.binding.as_type (constants.%.Self.binding.as_type.b61)]
|
||||
// CHECK:STDOUT: %.loc21_34.2: type = converted %.Self.ref, %.Self.as_type [symbolic = %.Self.binding.as_type (constants.%.Self.binding.as_type.b61)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.2: type = impl_witness_access constants.%Empty.lookup_impl_witness.177, element0 [symbolic = %impl.elem0.loc21_34.1 (constants.%impl.elem0.de5)]
|
||||
// CHECK:STDOUT: %T.ref.loc21_39: type = name_ref T, %T.loc21_6.2 [symbolic = %T.loc21_6.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %ptr.loc21_40.2: type = ptr_type %T.ref.loc21_39 [symbolic = %ptr.loc21_40.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %.loc21_28.2: type = where_expr %.Self.4 [symbolic = %Empty_where.type (constants.%Empty_where.type.334)] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%Empty.type.e63200.2
|
||||
// CHECK:STDOUT: %.loc21_28.2: type = where_expr %.Self.4 [symbolic = %Empty_where.type (constants.%Empty_where.type.2dc)] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%Empty.type.6f76f1.2
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem0.loc21_34.2, %ptr.loc21_40.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %U: @H.%Empty_where.type (%Empty_where.type.334) = value_binding U, %U.param
|
||||
// CHECK:STDOUT: %U: @H.%Empty_where.type (%Empty_where.type.2dc) = value_binding U, %U.param
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %V.loc21_43.2: type = symbolic_binding V, 1 [symbolic = %V.loc21_43.1 (constants.%V)]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -102,23 +102,23 @@ fn G(U: Empty(i32) where .A = i32*) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @H(%T.loc21_6.2: type, %V.loc21_43.2: type) {
|
||||
// CHECK:STDOUT: %T.loc21_6.1: type = symbolic_binding T, 0 [symbolic = %T.loc21_6.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.1: type = facet_type <@Empty, @Empty(%T.loc21_6.1)> [symbolic = %Empty.type.loc21_26.1 (constants.%Empty.type.e63200.2)]
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.1: type = facet_type <@Empty, @Empty(%T.loc21_6.1)> [symbolic = %Empty.type.loc21_26.1 (constants.%Empty.type.6f76f1.2)]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %require_complete.loc21_34: <witness> = require_complete_type %Empty.type.loc21_26.1 [symbolic = %require_complete.loc21_34 (constants.%require_complete.9a5)]
|
||||
// CHECK:STDOUT: %require_complete.loc21_34: <witness> = require_complete_type %Empty.type.loc21_26.1 [symbolic = %require_complete.loc21_34 (constants.%require_complete.8eb)]
|
||||
// CHECK:STDOUT: %Empty.assoc_type: type = assoc_entity_type @Empty, @Empty(%T.loc21_6.1) [symbolic = %Empty.assoc_type (constants.%Empty.assoc_type.ce4b5a.2)]
|
||||
// CHECK:STDOUT: %assoc0: @H.%Empty.assoc_type (%Empty.assoc_type.ce4b5a.2) = assoc_entity element0, @Empty.%A [symbolic = %assoc0 (constants.%assoc0.a20ab5.2)]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.1 [symbolic = %.Self.binding.as_type (constants.%.Self.binding.as_type.ae0)]
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.1, @Empty, @Empty(%T.loc21_6.1) [symbolic = %Empty.lookup_impl_witness (constants.%Empty.lookup_impl_witness.beb)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.1: type = impl_witness_access %Empty.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_34.1 (constants.%impl.elem0.7d7)]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.1 [symbolic = %.Self.binding.as_type (constants.%.Self.binding.as_type.b61)]
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.1, @Empty, @Empty(%T.loc21_6.1) [symbolic = %Empty.lookup_impl_witness (constants.%Empty.lookup_impl_witness.177)]
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.1: type = impl_witness_access %Empty.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_34.1 (constants.%impl.elem0.de5)]
|
||||
// CHECK:STDOUT: %ptr.loc21_40.1: type = ptr_type %T.loc21_6.1 [symbolic = %ptr.loc21_40.1 (constants.%ptr.e8f)]
|
||||
// CHECK:STDOUT: %Empty_where.type: type = facet_type <@Empty, @Empty(%T.loc21_6.1) where %impl.elem0.loc21_34.1 = %ptr.loc21_40.1> [symbolic = %Empty_where.type (constants.%Empty_where.type.334)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %Empty_where.type [symbolic = %pattern_type (constants.%pattern_type.649)]
|
||||
// CHECK:STDOUT: %Empty_where.type: type = facet_type <@Empty, @Empty(%T.loc21_6.1) where %impl.elem0.loc21_34.1 = %ptr.loc21_40.1> [symbolic = %Empty_where.type (constants.%Empty_where.type.2dc)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %Empty_where.type [symbolic = %pattern_type (constants.%pattern_type.bb3)]
|
||||
// CHECK:STDOUT: %V.loc21_43.1: type = symbolic_binding V, 1 [symbolic = %V.loc21_43.1 (constants.%V)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete.loc21_17: <witness> = require_complete_type %Empty_where.type [symbolic = %require_complete.loc21_17 (constants.%require_complete.6ec)]
|
||||
// CHECK:STDOUT: %require_complete.loc21_17: <witness> = require_complete_type %Empty_where.type [symbolic = %require_complete.loc21_17 (constants.%require_complete.6bc)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%U.param: @H.%Empty_where.type (%Empty_where.type.334)) {
|
||||
// CHECK:STDOUT: fn(%U.param: @H.%Empty_where.type (%Empty_where.type.2dc)) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
@@ -126,36 +126,36 @@ fn G(U: Empty(i32) where .A = i32*) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @H(constants.%T, constants.%V) {
|
||||
// CHECK:STDOUT: %T.loc21_6.1 => constants.%T
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.1 => constants.%Empty.type.e63200.2
|
||||
// CHECK:STDOUT: %.Self.1 => constants.%.Self.86d
|
||||
// CHECK:STDOUT: %require_complete.loc21_34 => constants.%require_complete.9a5
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.1 => constants.%Empty.type.6f76f1.2
|
||||
// CHECK:STDOUT: %.Self.1 => constants.%.Self.b4b
|
||||
// CHECK:STDOUT: %require_complete.loc21_34 => constants.%require_complete.8eb
|
||||
// CHECK:STDOUT: %Empty.assoc_type => constants.%Empty.assoc_type.ce4b5a.2
|
||||
// CHECK:STDOUT: %assoc0 => constants.%assoc0.a20ab5.2
|
||||
// CHECK:STDOUT: %.Self.binding.as_type => constants.%.Self.binding.as_type.ae0
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness => constants.%Empty.lookup_impl_witness.beb
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.1 => constants.%impl.elem0.7d7
|
||||
// CHECK:STDOUT: %.Self.binding.as_type => constants.%.Self.binding.as_type.b61
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness => constants.%Empty.lookup_impl_witness.177
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.1 => constants.%impl.elem0.de5
|
||||
// CHECK:STDOUT: %ptr.loc21_40.1 => constants.%ptr.e8f
|
||||
// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.334
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.649
|
||||
// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.2dc
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.bb3
|
||||
// CHECK:STDOUT: %V.loc21_43.1 => constants.%V
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @H(constants.%i32, bool) {
|
||||
// CHECK:STDOUT: %T.loc21_6.1 => constants.%i32
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.1 => constants.%Empty.type.f62
|
||||
// CHECK:STDOUT: %.Self.1 => constants.%.Self.101
|
||||
// CHECK:STDOUT: %require_complete.loc21_34 => constants.%complete_type.695
|
||||
// CHECK:STDOUT: %Empty.type.loc21_26.1 => constants.%Empty.type.4fb
|
||||
// CHECK:STDOUT: %.Self.1 => constants.%.Self.ec6
|
||||
// CHECK:STDOUT: %require_complete.loc21_34 => constants.%complete_type.ba8
|
||||
// CHECK:STDOUT: %Empty.assoc_type => constants.%Empty.assoc_type.623
|
||||
// CHECK:STDOUT: %assoc0 => constants.%assoc0.333
|
||||
// CHECK:STDOUT: %.Self.binding.as_type => constants.%.Self.binding.as_type.534
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness => constants.%Empty.lookup_impl_witness.543
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.1 => constants.%impl.elem0.d49
|
||||
// CHECK:STDOUT: %.Self.binding.as_type => constants.%.Self.binding.as_type.63c
|
||||
// CHECK:STDOUT: %Empty.lookup_impl_witness => constants.%Empty.lookup_impl_witness.924
|
||||
// CHECK:STDOUT: %impl.elem0.loc21_34.1 => constants.%impl.elem0.238
|
||||
// CHECK:STDOUT: %ptr.loc21_40.1 => constants.%ptr.235
|
||||
// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.823
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.3bd
|
||||
// CHECK:STDOUT: %Empty_where.type => constants.%Empty_where.type.729
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.ee5
|
||||
// CHECK:STDOUT: %V.loc21_43.1 => bool
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete.loc21_17 => constants.%complete_type.98a
|
||||
// CHECK:STDOUT: %require_complete.loc21_17 => constants.%complete_type.863
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+42
-42
@@ -227,9 +227,9 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %N.type: type = facet_type <@N> [concrete]
|
||||
// CHECK:STDOUT: %N.assoc_type: type = assoc_entity_type @N [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %N.assoc_type = assoc_entity element0, @N.%P [concrete]
|
||||
// CHECK:STDOUT: %.Self.2ef: %N.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.2ef [symbolic_self]
|
||||
// CHECK:STDOUT: %N.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.2ef, @N [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.245: %N.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.245 [symbolic_self]
|
||||
// CHECK:STDOUT: %N.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.245, @N [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access %N.lookup_impl_witness, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
|
||||
@@ -251,7 +251,7 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %N.ref: type = name_ref N, file.%N.decl [concrete = constants.%N.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %N.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.2ef]
|
||||
// CHECK:STDOUT: %.Self.ref: %N.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.245]
|
||||
// CHECK:STDOUT: %P.ref: %N.assoc_type = name_ref P, @P.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc9_22: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -284,19 +284,19 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %A.assoc_type: type = assoc_entity_type @A [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %A.assoc_type = assoc_entity element0, @A.%B [concrete]
|
||||
// CHECK:STDOUT: %assoc1: %A.assoc_type = assoc_entity element1, @A.%C [concrete]
|
||||
// CHECK:STDOUT: %.Self.af4: %A.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.091: %A.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.af4 [symbolic_self]
|
||||
// CHECK:STDOUT: %A.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.af4, @A [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.091 [symbolic_self]
|
||||
// CHECK:STDOUT: %A.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.091, @A [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access %A.lookup_impl_witness, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete]
|
||||
// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %A_where.type.073: type = facet_type <@A where %impl.elem0 = bool> [concrete]
|
||||
// CHECK:STDOUT: %A_where.type.f51: type = facet_type <@A where %impl.elem0 = bool> [concrete]
|
||||
// CHECK:STDOUT: %impl.elem1: type = impl_witness_access %A.lookup_impl_witness, element1 [symbolic_self]
|
||||
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
|
||||
// CHECK:STDOUT: %A_where.type.f15: type = facet_type <@A where %impl.elem0 = bool and %impl.elem1 = %empty_tuple.type> [concrete]
|
||||
// CHECK:STDOUT: %D: %A_where.type.f15 = symbolic_binding D, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.ba3: type = pattern_type %A_where.type.f15 [concrete]
|
||||
// CHECK:STDOUT: %A_where.type.321: type = facet_type <@A where %impl.elem0 = bool and %impl.elem1 = %empty_tuple.type> [concrete]
|
||||
// CHECK:STDOUT: %D: %A_where.type.321 = symbolic_binding D, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.725: type = pattern_type %A_where.type.321 [concrete]
|
||||
// CHECK:STDOUT: %NestedRewrite.type: type = fn_type @NestedRewrite [concrete]
|
||||
// CHECK:STDOUT: %NestedRewrite: %NestedRewrite.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -306,13 +306,13 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %NestedRewrite.decl: %NestedRewrite.type = fn_decl @NestedRewrite [concrete = constants.%NestedRewrite] {
|
||||
// CHECK:STDOUT: %D.patt: %pattern_type.ba3 = symbolic_binding_pattern D, 0 [concrete]
|
||||
// CHECK:STDOUT: %D.patt: %pattern_type.725 = symbolic_binding_pattern D, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc10_42.1: type = splice_block %.loc10_42.2 [concrete = constants.%A_where.type.f15] {
|
||||
// CHECK:STDOUT: %.loc10_42.1: type = splice_block %.loc10_42.2 [concrete = constants.%A_where.type.321] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_31: %A.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.af4]
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_31: %A.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.091]
|
||||
// CHECK:STDOUT: %B.ref: %A.assoc_type = name_ref B, @B.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc10_31: type = facet_access_type %.Self.ref.loc10_31 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc10_31: type = converted %.Self.ref.loc10_31, %.Self.as_type.loc10_31 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -320,29 +320,29 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %Bool.call: init type = call constants.%Bool() [concrete = bool]
|
||||
// CHECK:STDOUT: %.loc10_36.1: type = value_of_initializer %Bool.call [concrete = bool]
|
||||
// CHECK:STDOUT: %.loc10_36.2: type = converted %Bool.call, %.loc10_36.1 [concrete = bool]
|
||||
// CHECK:STDOUT: %.loc10_25: type = where_expr %.Self.2 [concrete = constants.%A_where.type.073] {
|
||||
// CHECK:STDOUT: %.loc10_25: type = where_expr %.Self.2 [concrete = constants.%A_where.type.f51] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%A.type
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem0, %.loc10_36.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_48: %A.type = name_ref .Self, %.Self.3 [symbolic_self = constants.%.Self.af4]
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_48: %A.type = name_ref .Self, %.Self.3 [symbolic_self = constants.%.Self.091]
|
||||
// CHECK:STDOUT: %C.ref: %A.assoc_type = name_ref C, @C.%assoc1 [concrete = constants.%assoc1]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc10_48: type = facet_access_type %.Self.ref.loc10_48 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc10_48: type = converted %.Self.ref.loc10_48, %.Self.as_type.loc10_48 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %impl.elem1: type = impl_witness_access constants.%A.lookup_impl_witness, element1 [symbolic_self = constants.%impl.elem1]
|
||||
// CHECK:STDOUT: %.loc10_54.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
|
||||
// CHECK:STDOUT: %.loc10_54.2: type = converted %.loc10_54.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
|
||||
// CHECK:STDOUT: %.loc10_42.2: type = where_expr %.Self.3 [concrete = constants.%A_where.type.f15] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%A_where.type.073
|
||||
// CHECK:STDOUT: %.loc10_42.2: type = where_expr %.Self.3 [concrete = constants.%A_where.type.321] {
|
||||
// CHECK:STDOUT: requirement_base_facet_type constants.%A_where.type.f51
|
||||
// CHECK:STDOUT: requirement_rewrite %impl.elem1, %.loc10_54.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %D.loc10_18.2: %A_where.type.f15 = symbolic_binding D, 0 [symbolic = %D.loc10_18.1 (constants.%D)]
|
||||
// CHECK:STDOUT: %D.loc10_18.2: %A_where.type.321 = symbolic_binding D, 0 [symbolic = %D.loc10_18.1 (constants.%D)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic fn @NestedRewrite(%D.loc10_18.2: %A_where.type.f15) {
|
||||
// CHECK:STDOUT: %D.loc10_18.1: %A_where.type.f15 = symbolic_binding D, 0 [symbolic = %D.loc10_18.1 (constants.%D)]
|
||||
// CHECK:STDOUT: generic fn @NestedRewrite(%D.loc10_18.2: %A_where.type.321) {
|
||||
// CHECK:STDOUT: %D.loc10_18.1: %A_where.type.321 = symbolic_binding D, 0 [symbolic = %D.loc10_18.1 (constants.%D)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn();
|
||||
// CHECK:STDOUT: }
|
||||
@@ -357,22 +357,22 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %E.type: type = facet_type <@E> [concrete]
|
||||
// CHECK:STDOUT: %E.assoc_type: type = assoc_entity_type @E [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %E.assoc_type = assoc_entity element0, @E.%F [concrete]
|
||||
// CHECK:STDOUT: %.Self.ac6: %E.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.ac6 [symbolic_self]
|
||||
// CHECK:STDOUT: %E.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.ac6, @E [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.7f5: %E.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.7f5 [symbolic_self]
|
||||
// CHECK:STDOUT: %E.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.7f5, @E [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access %E.lookup_impl_witness, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %E_where.type: type = facet_type <@E where %impl.elem0 = %i32> [concrete]
|
||||
// CHECK:STDOUT: %G: %E_where.type = symbolic_binding G, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.133: type = pattern_type %E_where.type [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.606: type = pattern_type %E_where.type [concrete]
|
||||
// CHECK:STDOUT: %OneRewrite.type: type = fn_type @OneRewrite [concrete]
|
||||
// CHECK:STDOUT: %OneRewrite: %OneRewrite.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %H: %E_where.type = symbolic_binding H, 0 [symbolic]
|
||||
// CHECK:STDOUT: %RepeatedRewrite.type: type = fn_type @RepeatedRewrite [concrete]
|
||||
// CHECK:STDOUT: %RepeatedRewrite: %RepeatedRewrite.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %I: %E_where.type = symbolic_binding I, 0 [symbolic]
|
||||
// CHECK:STDOUT: %OneRewrite.specific_fn.3910de.2: <specific function> = specific_function %OneRewrite, @OneRewrite(%I) [symbolic]
|
||||
// CHECK:STDOUT: %OneRewrite.specific_fn.43f8b6.2: <specific function> = specific_function %OneRewrite, @OneRewrite(%I) [symbolic]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -380,13 +380,13 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %OneRewrite.decl: %OneRewrite.type = fn_decl @OneRewrite [concrete = constants.%OneRewrite] {
|
||||
// CHECK:STDOUT: %G.patt: %pattern_type.133 = symbolic_binding_pattern G, 0 [concrete]
|
||||
// CHECK:STDOUT: %G.patt: %pattern_type.606 = symbolic_binding_pattern G, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc9_21.1: type = splice_block %.loc9_21.2 [concrete = constants.%E_where.type] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [concrete = constants.%E.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref: %E.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.ac6]
|
||||
// CHECK:STDOUT: %.Self.ref: %E.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7f5]
|
||||
// CHECK:STDOUT: %F.ref: %E.assoc_type = name_ref F, @F.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type: type = facet_access_type %.Self.ref [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc9_27: type = converted %.Self.ref, %.Self.as_type [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -401,20 +401,20 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %G.loc9_15.2: %E_where.type = symbolic_binding G, 0 [symbolic = %G.loc9_15.1 (constants.%G)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %RepeatedRewrite.decl: %RepeatedRewrite.type = fn_decl @RepeatedRewrite [concrete = constants.%RepeatedRewrite] {
|
||||
// CHECK:STDOUT: %H.patt: %pattern_type.133 = symbolic_binding_pattern H, 0 [concrete]
|
||||
// CHECK:STDOUT: %H.patt: %pattern_type.606 = symbolic_binding_pattern H, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc11_26.1: type = splice_block %.loc11_26.2 [concrete = constants.%E_where.type] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %E.ref: type = name_ref E, file.%E.decl [concrete = constants.%E.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref.loc11_32: %E.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.ac6]
|
||||
// CHECK:STDOUT: %.Self.ref.loc11_32: %E.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7f5]
|
||||
// CHECK:STDOUT: %F.ref.loc11_32: %E.assoc_type = name_ref F, @F.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc11_32: type = facet_access_type %.Self.ref.loc11_32 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc11_32: type = converted %.Self.ref.loc11_32, %.Self.as_type.loc11_32 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %impl.elem0.loc11_32: type = impl_witness_access constants.%E.lookup_impl_witness, element0 [symbolic_self = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %int_32.loc11_37: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
|
||||
// CHECK:STDOUT: %i32.loc11_37: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %.Self.ref.loc11_45: %E.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.ac6]
|
||||
// CHECK:STDOUT: %.Self.ref.loc11_45: %E.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.7f5]
|
||||
// CHECK:STDOUT: %F.ref.loc11_45: %E.assoc_type = name_ref F, @F.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc11_45: type = facet_access_type %.Self.ref.loc11_45 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc11_45: type = converted %.Self.ref.loc11_45, %.Self.as_type.loc11_45 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -473,7 +473,7 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %H.loc11_20.1 => constants.%I
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %OneRewrite.specific_fn.loc13_3.2 => constants.%OneRewrite.specific_fn.3910de.2
|
||||
// CHECK:STDOUT: %OneRewrite.specific_fn.loc13_3.2 => constants.%OneRewrite.specific_fn.43f8b6.2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: specific @OneRewrite(constants.%I) {
|
||||
@@ -489,10 +489,10 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %J.assoc_type: type = assoc_entity_type @J [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %J.assoc_type = assoc_entity element0, @J.%K [concrete]
|
||||
// CHECK:STDOUT: %assoc1: %J.assoc_type = assoc_entity element1, @J.%L [concrete]
|
||||
// CHECK:STDOUT: %.Self.945: %J.type = symbolic_binding .Self [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.2fa: %J.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.945 [symbolic_self]
|
||||
// CHECK:STDOUT: %J.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.945, @J [symbolic_self]
|
||||
// CHECK:STDOUT: %.Self.binding.as_type: type = symbolic_binding_type .Self, %.Self.2fa [symbolic_self]
|
||||
// CHECK:STDOUT: %J.lookup_impl_witness: <witness> = lookup_impl_witness %.Self.2fa, @J [symbolic_self]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access %J.lookup_impl_witness, element0 [symbolic_self]
|
||||
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
|
||||
// CHECK:STDOUT: %impl.elem1: type = impl_witness_access %J.lookup_impl_witness, element1 [symbolic_self]
|
||||
@@ -500,7 +500,7 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %J_where.type: type = facet_type <@J where %impl.elem0 = %empty_tuple.type and %impl.elem1 = bool> [concrete]
|
||||
// CHECK:STDOUT: %M: %J_where.type = symbolic_binding M, 0 [symbolic]
|
||||
// CHECK:STDOUT: %pattern_type.2ca: type = pattern_type %J_where.type [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.a2c: type = pattern_type %J_where.type [concrete]
|
||||
// CHECK:STDOUT: %Alphabetical.type: type = fn_type @Alphabetical [concrete]
|
||||
// CHECK:STDOUT: %Alphabetical: %Alphabetical.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %N: %J_where.type = symbolic_binding N, 0 [symbolic]
|
||||
@@ -513,20 +513,20 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %Alphabetical.decl: %Alphabetical.type = fn_decl @Alphabetical [concrete = constants.%Alphabetical] {
|
||||
// CHECK:STDOUT: %M.patt: %pattern_type.2ca = symbolic_binding_pattern M, 0 [concrete]
|
||||
// CHECK:STDOUT: %M.patt: %pattern_type.a2c = symbolic_binding_pattern M, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc10_23.1: type = splice_block %.loc10_23.2 [concrete = constants.%J_where.type] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_29: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.945]
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_29: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.2fa]
|
||||
// CHECK:STDOUT: %K.ref: %J.assoc_type = name_ref K, @K.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc10_29: type = facet_access_type %.Self.ref.loc10_29 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc10_29: type = converted %.Self.ref.loc10_29, %.Self.as_type.loc10_29 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %impl.elem0: type = impl_witness_access constants.%J.lookup_impl_witness, element0 [symbolic_self = constants.%impl.elem0]
|
||||
// CHECK:STDOUT: %.loc10_35.1: %empty_tuple.type = tuple_literal () [concrete = constants.%empty_tuple]
|
||||
// CHECK:STDOUT: %.loc10_35.2: type = converted %.loc10_35.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_41: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.945]
|
||||
// CHECK:STDOUT: %.Self.ref.loc10_41: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.2fa]
|
||||
// CHECK:STDOUT: %L.ref: %J.assoc_type = name_ref L, @L.%assoc1 [concrete = constants.%assoc1]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc10_41: type = facet_access_type %.Self.ref.loc10_41 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc10_41: type = converted %.Self.ref.loc10_41, %.Self.as_type.loc10_41 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -543,13 +543,13 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %M.loc10_17.2: %J_where.type = symbolic_binding M, 0 [symbolic = %M.loc10_17.1 (constants.%M)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Reversed.decl: %Reversed.type = fn_decl @Reversed [concrete = constants.%Reversed] {
|
||||
// CHECK:STDOUT: %N.patt: %pattern_type.2ca = symbolic_binding_pattern N, 0 [concrete]
|
||||
// CHECK:STDOUT: %N.patt: %pattern_type.a2c = symbolic_binding_pattern N, 0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc12_19.1: type = splice_block %.loc12_19.2 [concrete = constants.%J_where.type] {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %.Self.ref.loc12_25: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.945]
|
||||
// CHECK:STDOUT: %.Self.ref.loc12_25: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.2fa]
|
||||
// CHECK:STDOUT: %L.ref: %J.assoc_type = name_ref L, @L.%assoc1 [concrete = constants.%assoc1]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc12_25: type = facet_access_type %.Self.ref.loc12_25 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc12_25: type = converted %.Self.ref.loc12_25, %.Self.as_type.loc12_25 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
@@ -557,7 +557,7 @@ let K: (E where .F = .Self.G) = bool;
|
||||
// CHECK:STDOUT: %Bool.call: init type = call constants.%Bool() [concrete = bool]
|
||||
// CHECK:STDOUT: %.loc12_30.1: type = value_of_initializer %Bool.call [concrete = bool]
|
||||
// CHECK:STDOUT: %.loc12_30.2: type = converted %Bool.call, %.loc12_30.1 [concrete = bool]
|
||||
// CHECK:STDOUT: %.Self.ref.loc12_39: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.945]
|
||||
// CHECK:STDOUT: %.Self.ref.loc12_39: %J.type = name_ref .Self, %.Self.2 [symbolic_self = constants.%.Self.2fa]
|
||||
// CHECK:STDOUT: %K.ref: %J.assoc_type = name_ref K, @K.%assoc0 [concrete = constants.%assoc0]
|
||||
// CHECK:STDOUT: %.Self.as_type.loc12_39: type = facet_access_type %.Self.ref.loc12_39 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
// CHECK:STDOUT: %.loc12_39: type = converted %.Self.ref.loc12_39, %.Self.as_type.loc12_39 [symbolic_self = constants.%.Self.binding.as_type]
|
||||
|
||||
+3
-3
@@ -30,7 +30,7 @@ fn NotGenericF(U: I where .T == i32) {}
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %I_where.type: type = facet_type <@I where TODO> [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.59d: type = pattern_type %I_where.type [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.092: type = pattern_type %I_where.type [concrete]
|
||||
// CHECK:STDOUT: %NotGenericF.type: type = fn_type @NotGenericF [concrete]
|
||||
// CHECK:STDOUT: %NotGenericF: %NotGenericF.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -40,8 +40,8 @@ fn NotGenericF(U: I where .T == i32) {}
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %NotGenericF.decl: %NotGenericF.type = fn_decl @NotGenericF [concrete = constants.%NotGenericF] {
|
||||
// CHECK:STDOUT: %U.patt: %pattern_type.59d = value_binding_pattern U [concrete]
|
||||
// CHECK:STDOUT: %U.param_patt: %pattern_type.59d = value_param_pattern %U.patt, call_param0 [concrete]
|
||||
// CHECK:STDOUT: %U.patt: %pattern_type.092 = value_binding_pattern U [concrete]
|
||||
// CHECK:STDOUT: %U.param_patt: %pattern_type.092 = value_param_pattern %U.patt, call_param0 [concrete]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %U.param: %I_where.type = value_param call_param0
|
||||
// CHECK:STDOUT: %.loc17_21.1: type = splice_block %.loc17_21.2 [concrete = constants.%I_where.type] {
|
||||
|
||||
Reference in New Issue
Block a user